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



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

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

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

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

任何提示我做错了什么?

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

确保您的服务器返回一个记录数组。如果你只有一条记录,把它放在一个数组中,然后发回。

使用Firebug查看这个演示

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

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

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

最新更新