Sencha Touch 2 Beta 2商店同步问题

时间:2012-02-09 16:05:50

标签: sencha-touch sencha-touch-2

在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();

2 个答案:

答案 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);
    }
});