如何检查Kendo Grid是否对其进行了更改?

时间:2012-10-04 05:03:59

标签: javascript kendo-ui kendo-grid

如何检查Kendo Grid是否有变化?我听说有一个dirty属性,但我找不到它。

6 个答案:

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