【问题标题】:extjs 3.4 getModifiedRecords after markDirty not workingmarkDirty 后的 extjs 3.4 getModifiedRecords 不起作用
【发布时间】: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 记录。还有其他需要更改的条件吗?

谢谢

【问题讨论】:

    标签: javascript extjs extjs3


    【解决方案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 返回幻象 ..

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      相关资源
      最近更新 更多