在ST1.x中,使用以下方法将onlinestore同步到offlinestore没有问题,现在似乎同步在STB2中不起作用。我可以看到控制台上输出的记录。还有谁有相同的问题吗?我相信这可能是一个错误......
var remoteStore = Ext.getStore('UpdateConfig');
var localStore = Ext.getStore('UpdateLocalConfig');
remoteStore.each(function (record) {
localStore.add(record.data);
console.log(record.data);
});
localStore.sync();
答案 0 :(得分:2)
同样的问题+回答@ Sencha Forum
...和同一个用户??? XD
答案 1 :(得分:2)
TommyMaintz在Sencha Touch 2 Forums上回答了这个问题,但我也想在这里给出答案。
“我认为我发现哪一个是错误的是你使用record.data向LocalStore添加记录。在ST2中我们现在有一个Model缓存。这意味着如果你创建两个完全相同的实例model和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);
}
});