2016-08-22 31 views
0

我有一個kendoGrid與dataBound函數集。劍道網格數據綁定正在遞歸

下面是我的代碼示例,在數據綁定中有一些更新UI視圖的集合。這個問題是,如果我把調試器放在第二行(var pageData ...),我可以看到.set再次觸發dataBound函數。我會假設該函數應該運行一次,並且.sets不會重新觸發它。

如果您有任何想法我做錯了,請幫助。由於

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

回答

0

通過set()設置一個數據項值觸發change事件網格DataSource實例,這反過來又導致電網重新綁定並顯示其數據的最新狀態。

,你能做些什麼來防止多個dataBound事件觸發:

  • 通過直接的制定者,而不是
  • 更新的數據項使用dataBinding事件,而不是通過API:

    row.CartTotal = cachedRowWithChanges.CartTotal; 
    row.dirty = true; 
    
  • 如果您想通過內置的Kendo UI CRUD操作持久更改遠程數據服務,則需要上述第二行。

下面是一個例子:

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; 
    } 
}