检查商店(或记录)是否已被编辑?

时间:2011-12-22 02:30:14

标签: extjs extjs4

我有一个网格面板,当我离开页面时,我想要检查存储中是否有任何项目(或迭代模型/记录)以检查是否有任何未保存的更改/添加。

我最初尝试将panel.getStore().getNewRecords()用于新记录,但它会返回当前分页的每条记录。panel.getStore().getUpdatedRecords()似乎忽略了记录,尽管网格中的每条单元格中都有一个小的红色三角形。< / p>

那么有人可以建议正确的方法来检查商店中是否存在任何新的或更新的记录吗?

8 个答案:

答案 0 :(得分:18)

这可能对你有用。

var records = store.getRange();

for (var i = 0; i < records.length; i++) {
    var rec = records[i];

    if (rec.dirty == true) {
        //Save data
    }
}

答案 1 :(得分:12)

为了保持封装脏检查逻辑,我选择向isDirty()对象添加Ext.data.Store方法。我使用了AbstractStore.sync()用来确定商店是否需要同步的相同逻辑。

Ext.define(null, {
    override: "Ext.data.Store",
    isDirty: function() {
        return (this.getNewRecords().length > 0 || this.getUpdatedRecords().length > 0 || this.getRemovedRecords().length > 0);
    }
});

我正在使用ExtJS 4.2.1。如果您在致电getNewRecords()时退回了所有记录,则应检查您是否在模型上为idProperty设置了值。

答案 2 :(得分:4)

您可以使用以下代码:

if(panel.getStore().getModifiedRecords().length > 0) {
  console.log('store has dirty records');
}

答案 3 :(得分:2)

我用这个:

isStoreModified: function(store)
{
  var modifiedRecords = store.getModifiedRecords();
  return modifiedRecords && modifiedRecords.length  && modifiedRecords.length > 0;
},

答案 4 :(得分:2)

if (panel.getStore().needsSync) {
    //store have unsaved changes.
}

答案 5 :(得分:1)

如果你是新手,请在@jstrickers回答mvc风格的节目:

创建:

    Ext.define('YourFolder.overridefolder.DataStore', { 

    override: "Ext.data.Store",
    isDirty: function() {
        return (this.getNewRecords().length > 0 || this.getUpdatedRecords().length > 0 || this.getRemovedRecords().length > 0);
    }

});

将此文件添加到相应的文件夹并在app.js&#39; required&#39;中指向它,然后在ext.data.store中提供isDirty

效果很好,如果您需要,该功能将可用。

答案 6 :(得分:0)

我基于@theboulderer的回答。我知道这是一个旧线程,但我认为这对于找到此页面的其他人可能有用。

我正在使用MVC模型,所以请记住这一点。

您所要做的就是将商店传递给函数,然后返回一个布尔值。

用法:

if (this.isDirtyStore(myStore)){
    ...
}

功能:

isDirtyStore: function(theStore){
    var isDirty = false;

    theStore.each(function(item){
        if(item.dirty == true){
            isDirty = true;
        }
    });
    if (!isDirty){
        isDirty = (theStore.removed.length > 0);
    }
    return isDirty;
}

答案 7 :(得分:0)

shw在这个帖子How do I get the dirty records from an ExtJS data store?中的回答,回答了你的问题。

技巧是商店读者需要指定一个idProperty,或者所有行都被认为是新的。

他们也提供了一个例子。