markDirty 后的 extjs 3.4 getModifiedRecords 不起作用

Posted

技术标签:

【中文标题】markDirty 后的 extjs 3.4 getModifiedRecords 不起作用【英文标题】:extjs 3.4 getModifiedRecords after markDirty not working 【发布时间】:2018-05-24 16:48:29 【问题描述】:

我正在使用 extjs 3.4,我希望在使用 getModifiedRecords 时显示记录。

dtl.store.getAt(i).markDirty(); 这就是我所做的,当我 console.log() 它时,我可以看到 dirty:true 还有 modified:idStyle: "TEST-4", idStyleDtl: 2052, color: 6, colorNm: "BLACK", s1: 0, …

它清楚地表明它已被修改并且有脏标志,但是当我这样做时ojbStore.getModifiedRecords() 它只返回空 []。我不明白为什么它不会返回 modified 记录。还有其他需要更改的条件吗?

谢谢

【问题讨论】:

【参考方案1】:

让我们从解决方案开始(单击 X 按钮并查看控制台):FIDDLE

现在这里发生的事情是,我在存储中手动调用我自己添加的函数 markDirtyFix 并将它传递给它一个记录(我想将其标记为脏)以将其放入修改记录列表中。实际上它是从商店复制的函数afterEdit。我刚刚评论了更新的fireEvent(因为这会强制在更新时发送请求,并且您想让它“仅在本地”变脏):

afterEdit: function(record)
    if(this.modified.indexOf(record) == -1)
        this.modified.push(record);
    
    this.fireEvent('update', this, record, Ext.data.Record.EDIT);//removed
,

所以奇迹发生了,store.getModifiedRecords() 在包含的数组中返回您的记录。

现在谈谈问题。所以问题是markDirty() 看起来像这样(来自官方文档):

markDirty: function()
    this.dirty = true;
    if(!this.modified)
        this.modified = ;
    
    this.fields.each(function(f) 
        this.modified[f.name] = this.data[f.name];
    ,this);

这里不会调用afterEdit 或类似的东西来使您的记录在存储级别上变脏(并且您看到它仅在记录级别上变脏)。 也许有人说它只用于记录级别,但 markDirty 文档描述说:

将记录标记为脏会导致 Ext.data.Store.getModifiedRecords 返回幻象 ..

所以它应该有效(但没有)。

【讨论】:

以上是关于markDirty 后的 extjs 3.4 getModifiedRecords 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

ExtJS 3.4 - 设置加载

Extjs 3.4 同值合并

Extjs-3.4 复选框组指定列中的复选框

ExtJS (3.4):更新 TabPanel 中面板的工具提示

ExtJS 3.4 中未加载数据

Extjs 3.4 应用切换器