2013-03-22 3 views
8

Когда вы связываетесь с сеткой пользовательского интерфейса Kendo с MVVM, бит данных будет срабатывать один раз, и все будет хорошо. Если вам необходимо обновить эти данные после этого факта, каждый раз, когда вы меняете одну часть данных на любой viewmodel (или в режиме просмотра для детей), вся привязка данных к сетке. Таким образом, если у вас есть ячейка в сетке, привязанная к шаблону, и вам нужно изменить 2 или 3 свойства в режиме просмотра из какого-либо внешнего источника ajax, Databound будет срабатывать 2 или 3 раза для каждой измененной модели, целая область просмотра для повторной обработки. Как мы можем сразу обновить множество данных и только один раз запустить бит данных?Как предотвратить зависание сетки Kendo UI во время обновления ViewModels

ответ

9

Как именно вы перепроверяете сетку? В принципе, если вы изменить некоторые модели, как это:

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

Таким образом, сетка будет действительно связаны два раза из-за MVVM. Событие изменения запускается каждый раз, когда вы вызываете set.

Однако если вы обновляете значения, как это:

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

Сетка обыкновение реагировать на изменения, а также не Пересвяжите перечитайте значения из моделей, вы можете заставить сетки, чтобы сделать это через обновления способ.

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

Этот подход работает отлично, пока вы знаете, к каким элементам вы привязаны. Если данные, которые вы обновляете, привязаны к нескольким вещам, и они обновляются в какой-то библиотеке, где вам не нужны элементы экрана, это может вызвать некоторые проблемы. Если вы вызываете set() в свойстве самого последнего элемента, тогда вам все равно, что связано с ним. Они все получат обновление. –

1

Я не уверен, есть ли способ временно передать сетке прекратить прослушивание событий, а затем в конце повторить синхронизацию один раз. Если есть, пожалуйста, дайте этот ответ здесь! В противном случае, что я сделал, я не прошел через .set() для каждого элемента. Вместо этого я обновил данные для всех строк, установив данные непосредственно в свойство. Затем, когда я добрался до последней строки, которую я обновлял, я вызвал .set() в последнем свойстве, которое необходимо было обновить. Это приведет к тому, что бит данных начнет срабатывать только один раз, и вся сетка обновится с помощью всех данных, которые были изменены. Если вы не делаете этого таким образом, то чем больше строк отображается на странице, тем больше времени требуется для обработки. (Это может занять 20 секунд, прежде чем пользователь сможет что-либо сделать снова.)

+0

Другой способ просто добавить фиктивную собственность последнего элемента и изменить его значение в конце. Это вызовет такой же эффект. –

1

Похоже, что событие dataBinding - это то место, где вы можете предотвратить перегруппировку сетки.

Telerik Online Docs

Смежные вопросы