我的json-store包含一条记录。更改字段后此记录是脏的,并且在store.sync()之后正确地使用action = update和正文中的记录数据发送POST。
在服务器端,我提交更新并发回原始发布的记录(成功:true)(包括所有字段)。
之后商店的记录增加了一倍,这意味着商店现在有两(2)个相同的记录(相同的ID等)。
我玩了我能想到的所有选项(root [on / off],idProperty(set / unset)等)。效果总是一样的。
任何提示我做错了什么?
答案 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]);
},
我真的不记得我为什么这样做了,但是因为我删除了构造函数,所以一切正常。但由于我相对缺乏经验,我不知道为什么会这样。