2016-08-22 3 views
0

私はkendoGridにdataBound関数を設定しました。剣道グリッドdataboundが再帰的になります

以下は私のコードのサンプルです。データビュー内には、UIビューを更新する一部のセットがあります。この問題は、2番目の行(var pageData ...)にデバッガを置くと、.setトリガのdataBound関数を再び見ることができるということです。私は関数が一度実行する必要があると仮定し、その.setsはそれを再トリガーしません。

私が間違っていることが分かっている場合は、助けてください。 set()を介してデータ項目の値を設定するおかげで

function() { 
    var pageData = grid.dataSource.data(); 
    $.each(pageData, function(index, row){ 
     if (row.Id == cachedRowWithChanges.Id) { //example 
      row.set("CartTotal", cachedRowWithChanges.CartTotal); 
     } 
    }); 
} 

答えて

0

順番に再バインドし、そのデータの最新の状態を表示するためのグリッドを起こしグリッドのDataSourceインスタンスのchangeイベントをトリガします。あなたが複数のdataBoundイベントの発火を防ぐために何ができるか

は次のとおりです。

row.CartTotal = cachedRowWithChanges.CartTotal; 
row.dirty = true; 

  • はないAPIを経由して、代わりに
  • 更新データ項目の直接セッターを経由してdataBindingイベントを使用します

  • 組み込みのKendo UI CRUD操作を使用してリモートデータサービスに変更を保存する場合は、上記の2行目が必要です。ここで

は一例です:

http://dojo.telerik.com/AYOrIL

+0

私がdataBindingを使用する場合、関数内のセットはdataBindingを繰り返し呼び出すので、その提案はdataBoundに相当します。 –

+0

.setを使用しないと、表示されるデータは更新されません。 –

1

のイベントを変更するには、あなたのロジックを移動することができ、あなたは単純なグローバル変数または

function() { 
    if (!this.__busy) { 
     this.__busy = true; 

     var pageData = grid.dataSource.data(); 
     $.each(pageData, function(index, row){ 
      if (row.Id == cachedRowWithChanges.Id) { //example 
       row.set("CartTotal", cachedRowWithChanges.CartTotal); 
      } 
     }); 

     this.__busy = false; 
    } 
} 
関連する問題