更新 ViewModel 时如何防止 Kendo UI Grid 多次重新绑定

Posted

技术标签:

【中文标题】更新 ViewModel 时如何防止 Kendo UI Grid 多次重新绑定【英文标题】:How to prevent Kendo UI Grid from rebinding many times when updating ViewModels 【发布时间】:2013-03-12 20:54:39 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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

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

【讨论】:

只要您知道绑定到什么元素,这种方法就可以正常工作。如果您要更新的数据绑定到多个事物,并且正在某种您不关心屏幕元素的库中进行更新,这可能会导致一些问题。如果您在最后一项的属性上调用 set(),那么您将不会关心绑定到它的内容。他们都会收到更新。【参考方案2】:

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

【讨论】:

另一种方法是简单地将一些虚假属性添加到最后一项并在最后更改其值。它会产生同样的效果。【参考方案3】:

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

Telerik Online Docs

【讨论】:

以上是关于更新 ViewModel 时如何防止 Kendo UI Grid 多次重新绑定的主要内容,如果未能解决你的问题,请参考以下文章

刷新 Kendo UI viewModel

Kendo UI - 如何使用 Kendo MVVM 将选中的属性(属性)和处理复选框的单击事件绑定到 viewModel

如何将 Kendo UI Grid 与 ToDataSourceResult()、IQueryable<T>、ViewModel 和 AutoMapper 一起使用?

Android LiveData防止在观察时接收到最后一个值

Kendo MVVM 数据绑定 Click

如何通过 javascript JSON 更新 KendoUI 图表?