我有一个绑定到 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的第二个版本:
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/