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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12720543/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-23 11:06:50  来源:igfitidea点击:

How do I check if a Kendo Grid has had changes made to it?

javascriptkendo-uikendo-grid

提问by muthucsm

How can I check if a Kendo Gridhas changes? I heard that there is a dirtyproperty, but I cant find it.

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

采纳答案by carlg

Added rows will have the dirty property set to true and so will updated rows. But, deleted rows are stored elsewhere (in the _destroyed collection). Pass this function the datasource of your grid to see if it has changes.

添加的行会将脏属性设置为 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;
}

回答by Chris Pietschmann

You can use the 'hasChanges' method on the Grid's underlying DataSource:

您可以在网格的底层数据源上使用“hasChanges”方法:

grid.dataSource.hasChanges();

$('#divGrid').data('kendoGrid').dataSource.hasChanges();

回答by Petur Subev

You can get notified and use the change event of the dataSource which will occur wherever you page/sort/group/filter/create/read/update/delete record.

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

To attach a handler to it use:

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

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

Update: If the user has updated any of the models .hasChanges() method of the dataSource will return true.

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

回答by Ricardo Bermudez

grid.dataSource.hasChanges will let you know if the datasource has changed

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

                            if (datasource.hasChanges() === true) {
                                alert('yes');
                            } else {
                                alert('no');
                            }

回答by Marco

The most convinient way to go is to use datasource.hasChanges(). However, this requires that the Idfield is defined in the schema.

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

From the docs:

文档

Checks if the data items have changed. Requires an [ID field] to be configured in schema.model.id, otherwise will always return true.

检查数据项是否已更改。需要在schema.model.id中配置[ID字段],否则将始终返回true。

If you do not have an Id field defined, you can use one of the countless ways to iterate over the data itself.

如果您没有定义 Id 字段,您可以使用无数种方法中的一种来迭代数据本身。

var isDataSourceDirty = function (ds) {
    var dirty = ds._data.filter(function(x){
        return x.dirty === true;
    });
    return dirty.length > 0 || ds._destroyed.length;
};

回答by Ann B. G.

worth a try:

值得一试:

var hasDirtyRow = $.grep(gridDataSource.view(), function(e) { return e.dirty === true; });
if (hasDirtyRow.length != 0)
{
     // grid has dirty row(s)
}