8

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

4

3 回答 3

9

你究竟是如何重新绑定网格的?基本上,如果您像这样更改某些模型:

dataItem.set('SomeField','new value');
dataItem.set('someOtherField','other value');

这样,由于 MVVM,Grid 确实会被绑定两次。每次调用 set 时都会触发 change 事件。

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

dataItem.SomeField='new value';
dataItem.someOtherField= 'other value';

网格不会对更改做出反应,也不会重新绑定从模型中重新读取值,您可以强制网格通过刷新方法执行此操作。

$('#gridName').data().kendoGrid.refresh()
于 2013-03-22T21:22:40.897 回答
1

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

于 2013-03-22T21:08:37.287 回答
1

看起来 dataBinding 事件是您可以防止重新绑定网格的地方。

Telerik 在线文档

于 2014-03-21T17:35:52.983 回答