在Ext JS 4中通过store.sync()更新记录后,记录加倍

时间:2011-12-15 16:52:08

标签: json extjs extjs4

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

在服务器端,我提交更新并发回原始发布的记录(成功:true)(包括所有字段)。

之后商店的记录增加了一倍,这意味着商店现在有两(2)个相同的记录(相同的ID等)。

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

任何提示我做错了什么?

3 个答案:

答案 0 :(得分:3)

我已经看到了同样的问题,我的理论是返回记录上的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映射。

答案 1 :(得分:2)

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

使用Firebug查看此demo

答案 2 :(得分:0)

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

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

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