2016-05-26 13 views
1

Wenn verwendet selectmenu und Binden von Daten an Option Text wie folgt aus:Datenoption Bindung an Text arbeiten nicht in jsviews-jQueryUI-Widgets

{^{selectmenu selectedAlbum}} 
    <option value="-">Please select</option> 
    {^{for albums}} 
     <option data-link="value{:id} {:name} selected{:id == ~root.selectedAlbum}">               </option> 
    {{/for}} 
{{/selectmenu}} 

Und binden Eigenschaft "name" wie folgt:

<input data-link="albums[selectedAlbum].name" /> 

Wenn Sie also die Eigenschaft "name" ändern, ändern Sie DOM Elements, aber das Widget wird nicht aktualisiert.

Vielleicht mache ich etwas falsch?

example code in fiddle

Antwort

1

Das Widget selectmenu jQuery UI versteckt die <option> und <select> Elemente und verwendet stattdessen <li> Elemente die Liste der Optionen zu zeigen. Es hört auch nicht auf Änderungen in den <option> Elementen. Wenn sich die Optionselemente ändern, wird die Änderung nicht in den angezeigten <li> s angezeigt.

Wenn Sie ein normales <select> Element verwenden, wird Ihr Szenario funktionieren. Wenn Sie jedoch das jQuery UI-Auswahlmenü verwenden möchten, müssen Sie die Aktualisierung erzwingen. Hier

ist eine Möglichkeit, das zu tun:

$.observable(app.albums).observeAll(function() { 
    // Refresh the view if albums change 
    $.view("#content").get(true, "selectmenu").parent.refresh(); 
}); 

See:

+0

Vielen Dank! Es hat mir geholfen. Es ist jedoch nicht optimal für den Einsatz in größeren Objektiven und ich musste Filter verwenden. [jsfiddle] (http://jsfiddle.net/5smy2ky7) –

+0

Es kann möglich sein, dies zu tun. $ .observable (app.albums) .observeAll (..., "name"); ' –