如何检查Kendo Grid是否有变化?我听说有一个dirty
属性,但我找不到它。
答案 0 :(得分:30)
您可以使用' hasChanges' Grid的基础DataSource上的方法:
grid.dataSource.hasChanges();
$('#divGrid').data('kendoGrid').dataSource.hasChanges();
答案 1 :(得分:19)
添加的行将将dirty属性设置为true,因此将更新行。但是,删除的行存储在别处(在_destroyed集合中)。将此函数传递给网格的数据源以查看它是否有更改。
function doesDataSourceHaveChanges(ds)
{
var dirty = false;
$.each(ds._data, function ()
{
if (this.dirty == true)
{
dirty = true;
}
});
if (ds._destroyed.length > 0) dirty = true;
return dirty;
}
答案 2 :(得分:9)
您可以收到通知并使用dataSource的更改事件,该事件将发生在您分页/排序/分组/过滤/创建/读取/更新/删除记录的任何位置。
要为其附加处理程序,请使用:
$('#YourGrid').data().kendoGrid.dataSource.bind('change',function(e){
//the event argument here will indicate what action just happned
console.log(e.action)// could be => "itemchange","add" or "remove" if you made any changes to the items
})
更新:如果用户更新了任何模型,则dataSource的.hasChanges()方法将返回true。
答案 3 :(得分:3)
grid.dataSource.hasChanges会告诉您数据源是否已更改
if (datasource.hasChanges() === true) {
alert('yes');
} else {
alert('no');
}
答案 4 :(得分:1)
值得一试:
var hasDirtyRow = $.grep(gridDataSource.view(), function(e) { return e.dirty === true; });
if (hasDirtyRow.length != 0)
{
// grid has dirty row(s)
}
答案 5 :(得分:0)
最方便的方法是使用datasource.hasChanges()
。但是,这需要在架构中定义Id
字段。
来自docs:
检查数据项是否已更改。需要[ID字段] 在schema.model.id中配置,否则将始终返回true。
如果您没有定义Id字段,则可以使用其中一种方法迭代数据本身。
var isDataSourceDirty = function (ds) {
var dirty = ds._data.filter(function(x){
return x.dirty === true;
});
return dirty.length > 0 || ds._destroyed.length;
};