2016-08-22 104 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; 
    } 
}