【发布时间】:2013-12-02 02:29:40
【问题描述】:
我似乎在使用 Kendo UI 绑定“计算”字段时遇到问题。
我正在尝试对几个我称之为“计算”字段的数据绑定。我在一个页面上有一个网格、几个按钮、过滤器和一些排序,它们都使用相同的数据源,一个名为“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 数组中的内容的先前、当前和 nextItems 副本,并同时更新这 3 个对象。没什么大不了的,但我只是想,你知道,如果我不需要的话,不要存储对象的副本。我希望在通过 API 时可能会错过类似于 C#/Xaml 的 NotifyPropertyChanged("MyProperty")。由于我们计算字段的一些复杂性以及随着设备变得更小而需要减少内存消耗,这种功能对于我在列表中的未来任务将是最有用的。
感谢您的帮助, 〜大卫
【问题讨论】:
-
如果你需要绑定到 Kendo ViewModel 的 change 事件,你可以使用这样的东西:
viewmodel.bind("change", function (e) { if (e.field == "currentItem") viewmodel.doSomething(); });
标签: javascript jquery html mvvm kendo-ui