2013-03-22 12 views
8

剣道UIグリッドにMVVMでバインドすると、databoundが一度起動し、すべて正常です。事実の後にそのデータを更新する必要がある場合は、任意のビューモデル(または子ビューモデル)のデータを変更するたびに、グリッド全体が再データバインドされます。したがって、テンプレートにバインドされているグリッド内にいくつかのセルがあり、外部のajaxソースからviewmodelの2つまたは3つのプロパティを変更する必要がある場合、Databoundは変更されたモデルごとに2〜3回起動します。表示可能領域全体を再バインドします。一度にたくさんのデータを更新するにはどうすればいいのですか?ViewModelsの更新時に剣道UIグリッドが何度も再バインドされないようにする方法

答えて

9

グリッドを正確にどのように再バインドしますか?基本的には、このようなモデルの一部を変更した場合:

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

この方法でグリッドは確かためMVVMの2倍にバインドされます。変更イベントは、setを呼び出すたびにトリガーされます。

しかし、あなたがこのような値は更新した場合:

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

グリッドは文句を言わない変化に反応し、文句を言わないリフレッシュを通じて、あなたがそれを行うには、グリッドを強制することができたモデルから値を再読み込み再バインドをメソッド。

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

この方法は、バインドされている要素が分かっている限り正常に動作します。更新しているデータが複数のものにバインドされていて、画面要素を気にしないライブラリの中で更新されている場合、これはいくつかの問題を引き起こす可能性があります。最後のアイテムのプロパティでset()を呼び出すと、バインドされているものは気になりません。彼らはすべて更新を得るでしょう。 –

1

一時的にグリッドにイベントのリッスンを停止し、最後に一度再同期するように指示する方法があるかどうかはわかりません。もしあれば、ここでその答えを教えてください!さもなければ、私が代わりに行ったのは、各項目に対して.set()を実行しなかったことです。代わりに、プロパティに直接データを設定することによって、すべての行のデータを更新しました。それから私が更新していた最後の行に着いたとき、更新が必要な最後のプロパティで.set()を呼び出しました。これにより、データバインドが1回だけ実行され、グリッド全体が変更されたすべてのデータで更新されます。このようにしないと、ページに表示される行が多いほど、処理に時間がかかります。 (ユーザーが何かをやり直すには20秒以上かかることがあります)

+0

もう一つの方法は、単に最後の項目にいくつかの偽のプロパティを追加し、最後にその値を変更することです。それは同じ効果を引き起こします。 –

1

dataBindingイベントは、グリッドでの再バインドを防ぐことができるようです。

Telerik Online Docs

関連する問題