2016-07-21 8 views
0

HTML更新ノックアウト観察可能な配列は、剣道マルチセレクト制御の更新に失敗し

<select id ="multiSelect" data-bind="options: choices, selectedOptions: selectedChoice"> 
</select> 
Selected: <strong data-bind="text: selectedChoice"> </strong> 

Javascriptを

var ViewModel = function() { 
    this.choices = ko.observableArray(["apple", "orange", "banana"]); 
    this.selectedChoice = ko.observableArray(); 
}; 

var vm = new ViewModel() 
ko.applyBindings(vm); 
vm.choices.push("watermelon"); 
$("#multiSelect").kendoMultiSelect().data("kendoMultiSelect"); 
vm.choices.push("strawberry"); 

私は結合ノックアウトがやや新たなんです。誰も私にストロベリーがマルチ選択ドロップダウンボックスに表示されない理由を説明することはできますか?ここで

はjsfiddleです:

http://jsfiddle.net/he0xx93s/3/

答えて

1

剣道の複数選択はノックアウト観察可能なオブジェクトによって行われた変更をリッスンしません。

回避策として使用できるのは、配列が変更されるたびに剣道MultiSelectのdataSourceを明示的に更新することです。あなたがデータソースのremove方法/更新アイテムを削除することができます。同様に

vm.choices.subscribe(function(changes) { 

    var ms = $("#multiSelect").data("kendoMultiSelect"); 

    changes.forEach(function(change) { 
     if (change.status === 'added') { 

      ms.dataSource.push(change.value); 
     } 
    }); 

}, null, "arrayChange"); 

:ここ

だから主なアイデアは、このようなものであるべきかto subscribe to a change.

です。

また、更新の場合は、特定のアイテム(例:3番目のアイテム)を取得し、剣道観察可能な方法のsetメソッドを使用することができます。

dataSource.data()[3].set('someProperty', newValue); 
関連する問題