2013-03-22 79 views
8

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

回答

9

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

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

这样的电网将被约束确实因为MVVM的两倍。每次您拨打电话时都会触发更改事件。

但是如果你更新这样的值:

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

网格不会改变作出反应,并不会重新绑定从型号上可以强制网格做到这一点通过刷新重新读取的值方法。

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

只要你知道你绑定了什么元素,这种方法就可以正常工作。如果您正在更新的数据绑定到不止一件事情上,并且正在某种您不关心屏幕元素的库中进行更新,则可能会导致一些问题。如果你在最后一个项目的属性上调用set(),那么你将不会在意绑定的内容。他们都会得到更新。 – 2013-03-25 13:21:34

1

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

+0

另一种方法是简单地伪造一些属性添加到最后一个项目,并在年底改变它的值。它会导致相同的效果。 – 2013-03-28 20:24:51

1

它看起来像dataBinding事件是你可以防止在网格上重新绑定。

Telerik Online Docs