observableArrayにバインドするテンプレートがあります
<ul data-bind="template: { name: 'defaultTemplate', foreach: itemsArray}"></ul>
...
そして、リンクをクリックして毎回データを更新する必要があります
<a data-bind="click: LoadData"><span>Refresh</span></a>
私のviewModelの最初のバージョン:
function viewModel (){
this.itmesArray = ko.observableArray([]);
self = this;
this.LoadData(){
if('undefined' != typeof MusicArray )
self.itmesArray.removeAll();
LoadDataFromServerAsync(self.itmesArray);
}
//ini
LoadData();
...
}
しかし、問題は、データがサーバーから非同期でロードされることです。そのため、短い時間間隔でリンクを高速でクリックすると、データが観察可能な配列で複数回複製される可能性があります。したがって、更新するたびに新しい配列にデータをロードする必要があると思います。
次に、viewModelの2番目のバージョン:
function viewModel (){
this.itmesArray = ko.observableArray([]);
self = this;
this.LoadData(){
if('undefined' != typeof MusicArray )
self.itmesArray.removeAll();
var tempArray = new Array();
LoadDataFromServerAsync(tempArray);
self.itmesArray(tempArray);
}
//ini
LoadData();
...
}
そして、新しい問題は、UIが配列の変更を感知できなかったことです。self.itmesArray(tempArray)は新しいobservableArrayオブジェクトを構築するようですが、テンプレートのバインドはまだ古いobservableArrayオブジェクトを追跡しています。これについてはよくわかりません。 。だから私は私の配列が変更されたことをテンプレート/UIバインディングに通知する方法を知りたいですか、または私の問題を修正するための他の回避策はありますか?
追加:jsFiddleのコード http://jsfiddle.net/zzcJC/10/