2012-02-09 2 views
1

В ST1.x У меня не было проблем с синхронизацией onlinestore с offlinestore с помощью метода ниже, теперь кажется, что синхронизация не работает в STB2. Я вижу, что записи выводятся на консоль. Кто-нибудь еще с этим вопросом? Я считаю, что это может быть ошибка ...Sencha Touch 2 Beta 2 Проблемы с синхронизацией магазина

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

Это был ответ в Sencha Touch 2 Forums от TommyMaintz, но я также хотел бы дать ответ.

«Одна вещь, я думаю, что я вижу, что это неправильно, так это то, что вы добавляете запись в LocalStore с использованием записи.data. В ST2 теперь у нас есть кэш модели. Это означает, что если вы создадите два экземпляра с точным той же модели и идентификатора, во второй раз, когда вы создаете этот экземпляр, он просто вернет уже существующий экземпляр. Это означает, что если вы синхронизируете свой локальный магазин, он не будет распознавать эту запись как фантомную запись, поскольку она уже имеет идентификатор Что вам нужно сделать в вашем случае, если вы хотите сделать «копию» вашей записи, используя все данные, но удалив идентификатор. Это создаст для него новый простой идентификатор и при сохранении его в локальном хранилище он будет генерировать правильный локальный идентификатор для него.

Когда я попытался это сделать, я заметил, что метод «копирования» на M odel не был обновлен, чтобы справиться с этим. Если вы применяете следующее переопределение, вы должны иметь возможность делать 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); 
    } 
}); 
+0

Спасибо, что разместили это здесь. Решили эту же проблему для меня. –