我似乎在使用Kendo UI时遇到了数据绑定“计算”字段的问题。
我正在尝试使用数据绑定来处理几个我称之为“计算”字段的问题。我有一个网格、几个按钮、过滤器和一页上所有使用相同数据源的排序,都使用observable数组' allItems '。allItems通过服务调用进行填充,并且在用户通过按钮操作页面时进行排序、操作和其他更改。
根据前一项、当前项和下一项中的信息,有几个导航按钮和几个div被填充,以符合当前应用的筛选和排序。这些按钮包含从前一个、当前和下一个项目中提取的信息,因为它们与allItems列表相关(即对象实际上保存在allItems数组中,并且实际上是可观察的对象)。
因此,在ViewModel对象中,我有如下内容(请原谅我简化):
var viewmodel = kendo.observable({
var allItems = observablearray[]
var currentIndex = 1; //or other default value
var changeCurrentItem = function(){
var self = this;
//do some stuff
//stuff might include modification to allItems
self.set("currentIndex", someNewValue);
}
var previousItem = function(){
return self.get('allItems')[currentIndex - 1];
}
var currentItem = function(){
return self.get('allItems')[currentIndex];
}
var nextItem = function(){
return self.get('allItems')[currentIndex + 1];
});
return viewmodel;
按钮和其他信息框绑定到先前、当前和下一个项目。但这似乎不起作用。我不得不复制 allItems 数组中的内容并同时更新这三个对象的 previous、current 和 nextItems 副本。虽然不是很麻烦,但如果不必要,我只想不存储对象的副本。我希望在查看 API 时没有错过类似于 C#/Xaml 的 NotifyPropertyChanged("MyProperty") 功能。由于某些计算字段的复杂性以及需要减少设备内存消耗,这种功能对我未来的任务非常有用。
谢谢任何帮助, ~David
viewmodel.bind("change", function (e) { if (e.field == "currentItem") viewmodel.doSomething(); });
- John Washam