Javascript 剑道UI-属性已更改MVVM

Javascript 剑道UI-属性已更改MVVM,javascript,jquery,html,mvvm,kendo-ui,Javascript,Jquery,Html,Mvvm,Kendo Ui,我似乎在用剑道UI数据绑定“计算”字段时遇到问题 我试图用几个我称之为“计算”的字段进行数据绑定。我在一个页面上有一个网格、几个按钮、过滤器和一些排序,它们都使用相同的数据源,一个称为“allItems”的可观察数组。allItems通过服务调用填充,并在用户通过按钮进入页面时进行排序、操作和其他更改 有几个导航按钮和几个div,它们根据应用的当前筛选器和排序,基于上一项、当前项和下一项中的信息填充。这些按钮中包含从上一个、当前和下一个项目中提取的信息,因为它们与allItems列表相关(即对象

我似乎在用剑道UI数据绑定“计算”字段时遇到问题

我试图用几个我称之为“计算”的字段进行数据绑定。我在一个页面上有一个网格、几个按钮、过滤器和一些排序,它们都使用相同的数据源,一个称为“allItems”的可观察数组。allItems通过服务调用填充,并在用户通过按钮进入页面时进行排序、操作和其他更改

有几个导航按钮和几个div,它们根据应用的当前筛选器和排序,基于上一项、当前项和下一项中的信息填充。这些按钮中包含从上一个、当前和下一个项目中提取的信息,因为它们与allItems列表相关(即对象实际上保存在allItems数组中,并且实际上是可观察的对象)

因此,在viewmodel对象中,我有类似这样的内容(请原谅短交):

按钮和其他信息框绑定到上一个、当前和下一个项目。但这似乎不起作用。我必须对allItems数组中的内容制作以前的、当前的和nextItems副本,并同时更新这3个对象。没什么大不了的,但我只是想,你知道,如果不需要的话,不存储对象的副本。我希望有一个NotifyPropertyChanged(“MyProperty”)类似于我在浏览API时错过的C#/Xaml。由于计算字段的复杂性以及随着设备变小而减少内存消耗的需要,这种功能对于我在列表中列出的未来任务将非常有用

谢谢你的帮助,
~David

每当视图模型的属性更改时,都会触发

要在计算字段中执行此操作,需要使用访问相关字段。请参阅文档中的。

2可能的问题

1) 如何将项目放入
allitems

2) 您还应该
.get(“currentIndex”)
,因为这是您在
changeCurrentItem

var currentItem = function(){
    return self.get('allItems')[self.get('currentIndex')];
}
这将导致
viewModel
allItems
currentIndex
发生更改时,为
currentItem
计算字段触发其更改事件

如果所有其他操作都失败,您可以通过执行以下操作手动触发更改事件:

viewmodel.trigger("change", { field: "currentItem" });
viewmodel.trigger("change", { field: "previousItem" });
viewmodel.trigger("change", { field: "nextItem" });

这类似于在XAML中调用NotifyPropertyChanged(“currentItem”)。

我应该说明我已经通过self.get(“allItems”)[currentIndex]访问了allItems。我修改了这个问题来反映这一点。您能创建一个JSFIDLE来演示这个问题吗?或者至少向我们展示如何绑定视图模型?您能展示一个使用kendo和jquery的JSFIDLE示例吗?我不知道如何吸引那里的外部资源。让我试着回答一些关于我的实施的问题。。。1.我现在已经将代码更改为使用:var currentItem=function(){return self.get('allItems')[self.get('currentIndex')];}2。我决定在项目发生移动时尝试viewmodel.trigger。触发器(“change”,{field:“nextItem”});3.allItems是通过使用self.get(“allItems”).push(newItem)的服务调用填充的——这适用于绑定到array 4的任何东西。对于不同的字段,html是这样绑定的:谢谢你用Spike编码。。。我正在使用TypeScript,并且.get和.set方法对我的依赖函数不起作用。viewmodel.trigger方法非常有效!在WPF中使用MVVM时,我也使用相同的方法。如果需要绑定到Kendo ViewModel的更改事件,可以使用如下内容:
ViewModel.bind(“change”,function(e){If(e.field==“currentItem”)ViewModel.doSomething();})
viewmodel.trigger("change", { field: "currentItem" });
viewmodel.trigger("change", { field: "previousItem" });
viewmodel.trigger("change", { field: "nextItem" });