1

在 ST1.x 中,我使用以下方法将在线商店同步到离线商店没有问题,现在看来同步在 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();
4

2 回答 2

2

同样的问题+答案@煎茶论坛

...和同一个用户???XD

于 2012-02-10T07:37:36.393 回答
2

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);
    }
});
于 2012-02-10T14:39:55.657 回答