Mvvm 如何防止Kendo UI Grid在更新ViewModels时多次重新绑定

Mvvm 如何防止Kendo UI Grid在更新ViewModels时多次重新绑定,mvvm,kendo-ui,kendo-grid,Mvvm,Kendo Ui,Kendo Grid,当您使用MVVM绑定到剑道UI网格时,databound将一次性启动,一切正常。如果需要在事后更新该数据,则每次更改任何viewmodel(或子viewmodel)上的一段数据时,整个网格都会重新数据绑定。因此,如果网格中的某个单元格绑定到模板,并且必须从某个外部ajax源更改viewmodel上的2或3个属性,则Databound将为每个更改的模型触发2或3次,从而导致整个可视区域重新绑定。我们如何一次更新大量数据,并且只进行一次数据绑定触发?我不确定是否有某种方法可以临时通知网格停止侦听事件

当您使用MVVM绑定到剑道UI网格时,databound将一次性启动,一切正常。如果需要在事后更新该数据,则每次更改任何viewmodel(或子viewmodel)上的一段数据时,整个网格都会重新数据绑定。因此,如果网格中的某个单元格绑定到模板,并且必须从某个外部ajax源更改viewmodel上的2或3个属性,则Databound将为每个更改的模型触发2或3次,从而导致整个可视区域重新绑定。我们如何一次更新大量数据,并且只进行一次数据绑定触发?

我不确定是否有某种方法可以临时通知网格停止侦听事件,然后在最后重新同步一次。如果有,请在这里给出答案!否则,我所做的是没有对每个项目执行.set()。相反,我通过直接将数据设置为属性来更新所有行的数据。然后,当我到达要更新的最后一行时,我对需要更新的最后一个属性调用了.set()。这将导致databound只触发一次,整个网格将使用所有更改的数据刷新自身。如果不这样做,那么页面上显示的行越多,处理时间就越长。(可能需要20多秒,用户才能再次执行任何操作。)

如何重新绑定网格?基本上,如果您更改某些模型,如下所示:

dataItem.set('SomeField','newvalue');
set('someOtherField','othervalue');
这样,由于MVVM,网格实际上会绑定两次。每次调用set时都会触发更改事件

但是,如果像这样更新值:

dataItem.SomeField='newvalue';
dataItem.someOtherField='其他值';
网格不会对更改做出反应,也不会重新绑定重新读取模型中的值。您可以通过刷新方法强制网格执行此操作

$('#gridName').data().kendoGrid.refresh()

看起来数据绑定事件可以防止网格上的重新绑定


只要您知道绑定到哪个元素,这种方法就可以正常工作。如果您要更新的数据绑定到多个对象,并且它在某种类型的库中更新,而您不关心屏幕元素,这可能会导致一些问题。如果在最后一个项的属性上调用set(),则不必关心绑定到它的内容。他们都会得到更新。另一种方法是简单地在最后一项中添加一些虚假属性,并在最后更改其值。它也会产生同样的效果。