我有一个带有dataBound函数集的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);
}
});
}
答案 0 :(得分:1)
您可以移动逻辑以更改数据源事件
dataSource: {
change: function(e) {
// data will have new data source
var data = this.data();
}
}
答案 1 :(得分: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;
}
}
答案 2 :(得分:0)
通过set()
设置数据项值会触发Grid DataSource实例的change
事件,从而导致Grid重新绑定并显示其数据的最新状态。
您可以采取哪些措施来阻止多个dataBound
事件触发:
dataBinding
事件通过直接设置器更新数据项,而不是通过API:
row.CartTotal = cachedRowWithChanges.CartTotal;
row.dirty = true;
如果您想通过内置的Kendo UI CRUD操作将更改保留到远程数据服务,则需要上面的第二行。
以下是一个例子: