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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章