21

如何检查剑道网格是否有变化?听说有dirty房产,但是找不到。

4

6 回答 6

39

您可以在 Grid 的底层 DataSource 上使用“hasChanges”方法:

grid.dataSource.hasChanges();

$('#divGrid').data('kendoGrid').dataSource.hasChanges();
于 2014-06-10T16:22:32.380 回答
21

添加的行会将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;
}
于 2012-10-04T18:44:24.600 回答
9

您可以获得通知并使用数据源的更改事件,该事件将在您分页/排序/组/过滤/创建/读取/更新/删除记录的任何位置发生。

要将处理程序附加到它,请使用:

$('#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
})

更新:如果用户更新了任何模型,数据源的 .hasChanges() 方法将返回 true。

于 2012-10-04T20:36:02.543 回答
3

grid.dataSource.hasChanges 将让您知道数据源是否已更改

                            if (datasource.hasChanges() === true) {
                                alert('yes');
                            } else {
                                alert('no');
                            }
于 2014-10-20T13:56:54.780 回答
2

最方便的方法是使用datasource.hasChanges(). 但是,这需要Id在模式中定义字段。

文档

检查数据项是否已更改。需要在 schema.model.id 中配置 [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;
};
于 2018-04-17T06:53:55.857 回答
1

值得一试:

var hasDirtyRow = $.grep(gridDataSource.view(), function(e) { return e.dirty === true; });
if (hasDirtyRow.length != 0)
{
     // grid has dirty row(s)
}
于 2012-10-05T00:47:27.200 回答