【问题标题】:After updating a record via store.sync() in Ext JS 4, the record is doubled在 Ext JS 4 中通过 store.sync() 更新记录后,记录翻倍
【发布时间】:2011-12-15 16:52:07
【问题描述】:

我的 json-store 包含一条记录。此记录在更改字段后是脏的,并且在 store.sync() 之后正确发送了一个带有 action=update 的 POST 和正文中的记录数据。

在服务器端,我提交更新并将记录发回(成功:true),因为它最初发布(包括所有字段)。

之后商店将记录翻倍,这意味着商店现在有两 (2) 条相同的记录(相同的 id 等)。

我尝试了所有我能想到的选项(root [on/off]、idProperty(set/unset)等),效果总是一样的。

任何提示我做错了什么?

【问题讨论】:

    标签: json extjs extjs4


    【解决方案1】:

    我看到了同样的问题,我的理论是返回记录上的 id 匹配没有正确发生。我的意思是在我看来 idProperty 类型必须是 int 例如,而不是字符串或类似的灾难。我无法以一种或另一种方式证明这一点,但我确实有一种解决方法。以下是我“处理”这个问题的方式:

    1)。不发回数据,只发送成功消息。
    2)。使用以下存储侦听器手动清除脏标志:

    listeners : {
                write: function(store, operation, opts){
                    console.log('request wrote!');
                    //workaround to sync up store records with just completed operation
                    Ext.each(operation.records, function(record){
                        if (record.dirty) {
                            record.commit();
                        }
                        /*if (record.phantom) {
                            record.phantom=false;
                        }*/
                    });
                    store.load();
                },
                delay: 2000
            }
    

    编辑:我不久前在高级论坛上问过这个问题,我得到的答案是它应该可以工作,这是一个应该证明它的例子。 http://pastebin.com/z3gekQDn请注意模型中的id映射。

    【讨论】:

    • 这可行,但与描述的不同......当我只发回“{success:true}”时。一切正常,我不必清除脏标志。它是自动完成的。这是错误还是功能?
    • ExtJS 有很多实际上只是“功能”的错误... =/
    • 请参阅我的答案中的编辑以获取一个假定有效的示例。
    【解决方案2】:

    确保您的服务器返回一个记录数组。如果您只有一条记录,请将其放入数组中并发送回。

    用 Firebug 查看这个demo

    【讨论】:

    • 这绝对行不通。如果我同时更新两条记录并将它们作为数组发回,则两者都在商店中重复。发送数组中的记录不会改变任何内容。 --> 另见我对其他答案的评论。
    【解决方案3】:

    我终于找到了所描述的不当行为的原因。在我的模型中,我已经像这样覆盖了构造函数:

    constructor: function(config) {
        this.callParent([config]);
    },
    

    我真的不记得我为什么这样做了,但是因为我已经删除了构造函数,所以一切正常。但由于我相对缺乏经验,我不知道为什么会这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多