2012-02-09 132 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

TommyMaintz在Sencha Touch 2 Forums上回答了這個問題,但我也想在這裏給出答案。

「我認爲有一件事是錯誤的,那就是您正在使用record.data向LocalStore添加一條記錄,在ST2中我們現在有一個Model緩存,這意味着如果您創建兩個實例相同的模型和ID,第二次創建該實例時,它只會返回已存在的實例,這意味着如果您同步本地存儲,則它不會將該記錄識別爲「幻影」記錄,因爲它已經有一個ID 。如果你想通過使用所有的數據,但刪除ID來創建你的記錄的「複製」,你將不得不做的事情,這將產生一個新的簡單的ID,當你將它保存到本地存儲它會爲它生成一個合適的本地ID

當我嘗試這樣做時,我注意到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

感謝您發佈此處。解決了同樣的問題。 – 2012-06-03 06:19:56