Javascript 剑道网格数据绑定是递归的

Javascript 剑道网格数据绑定是递归的,javascript,jquery,kendo-ui,grid,kendo-grid,Javascript,Jquery,Kendo Ui,Grid,Kendo Grid,我有一个带数据绑定函数集的kendoGrid 下面是我的代码示例,在数据绑定中有一些更新UI视图的集合。这个问题是,如果我将调试器放在第二行(var pageData…),我可以看到.set再次触发dataBound函数。我假设函数应该运行一次,并且.sets不会重新触发它 如果你知道我做错了什么,请帮忙。谢谢 function() { var pageData = grid.dataSource.data(); $.each(pageData, function(index,

我有一个带数据绑定函数集的kendoGrid

下面是我的代码示例,在数据绑定中有一些更新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);
        }
    });
}

通过
set()
设置数据项值会触发网格数据源实例的
change
事件,从而导致网格重新绑定并显示其数据的最新状态

防止多个
数据绑定
事件触发的方法是:

  • 改用
    数据绑定
    事件
  • 通过直接设置器而不是API更新数据项:

    row.CartTotal = cachedRowWithChanges.CartTotal;
    row.dirty = true;
    
  • 如果希望通过内置的Kendo UI CRUD操作持久化对远程数据服务的更改,则需要上面的第二行

以下是一个例子:


通过
set()
设置数据项值会触发网格数据源实例的
change
事件,从而导致网格重新绑定并显示其数据的最新状态

防止多个
数据绑定
事件触发的方法是:

  • 改用
    数据绑定
    事件
  • 通过直接设置器而不是API更新数据项:

    row.CartTotal = cachedRowWithChanges.CartTotal;
    row.dirty = true;
    
  • 如果希望通过内置的Kendo UI CRUD操作持久化对远程数据服务的更改,则需要上面的第二行

以下是一个例子:


您可以移动逻辑来更改数据源的事件

 dataSource: {        
    change: function(e) {
         // data will have new data source
         var data = this.data();    
    }  
 }

您可以移动逻辑来更改数据源的事件

 dataSource: {        
    change: function(e) {
         // data will have new data source
         var data = this.data();    
    }  
 }

为了防止无限递归,可以在网格中使用简单的全局变量或自定义属性,如下所示:

function(){
如果(!这个忙){
这是。uuu busy=true;
var pageData=grid.dataSource.data();
$.each(页面数据,函数(索引,行){
如果(row.Id==cachedRowWithChanges.Id){//示例
行集合(“CartTotal”,cachedRowWithChanges.CartTotal);
}
});
这是.\uuu busy=false;
}
}

为了防止无限递归,可以在网格中使用简单的全局变量或自定义属性,如下所示:

function(){
如果(!这个忙){
这是。uuu busy=true;
var pageData=grid.dataSource.data();
$.each(页面数据,函数(索引,行){
如果(row.Id==cachedRowWithChanges.Id){//示例
行集合(“CartTotal”,cachedRowWithChanges.CartTotal);
}
});
这是.\uuu busy=false;
}
}

如果我使用数据绑定,则函数中的集合会重复调用数据绑定,从而使该建议等效于数据绑定。如果我不使用,则显示的数据不会更新。如果我使用数据绑定,则函数中的集合会重复调用数据绑定,从而使该建议等效于数据绑定。如果我不使用,则设置显示的数据未更新。