【发布时间】:2011-12-30 18:02:33
【问题描述】:
我有一个绑定到 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/
【问题讨论】:
标签: knockout.js ko.observablearray