TommyMaintz在Sencha Touch 2 论坛上回答了这个问题,但我也想在这里给出答案。
“我认为我发现错误的一件事是您正在使用 record.data 将记录添加到 LocalStore。在 ST2 中,我们现在有一个模型缓存。这意味着如果您创建两个具有完全相同模型和 id 的实例, 第二次创建该实例时,它只会返回已经存在的实例。这意味着如果您同步本地存储,它不会将该记录识别为“幻影”记录,因为它已经有一个 id。你会如果您想通过使用所有数据但删除 id 来制作记录的“副本”,则必须在您的情况下这样做。这将为它生成一个新的简单 id,当您将其保存到本地存储时,它将生成一个适当的本地 ID。
当我尝试这样做时,我注意到模型上的“复制”方法尚未更新以处理此问题。如果您应用以下覆盖,您应该能够执行 localStore.add(record.copy()); localStore.sync()"
Ext.define('Ext.data.ModelCopyFix', {
override: 'Ext.data.Model',
/**
* Creates a copy (clone) of this Model instance.
*
* @param {String} id A new id. If you don't specify this a new id will be generated for you.
* To generate a phantom instance with a new id use:
*
* var rec = record.copy(); // clone the record with a new id
*
* @return {Ext.data.Model}
*/
copy: function(newId) {
var me = this,
idProperty = me.getIdProperty(),
raw = Ext.apply({}, me.raw),
data = Ext.apply({}, me.data);
delete raw[idProperty];
delete data[idProperty];
return new me.self(null, newId, raw, data);
}
});