2012-03-07 58 views
1

我的應用程序是需要完成的表單的待辦事項列表。Sencha Touch Sync並從服務器獲取新數據

  1. 當應用程序打開時,它會進入服務器並收集(從數據庫)一個表格列表以完成。
  2. 當您單擊表單時,您可以填寫數據(使用LocalStorage代理),然後保存/更新數據。數據本地存儲在設備上。

截至目前:當我再次打開應用程序,它收集待辦事項的同一列表,並在localStorage的新的空表格覆蓋的數據(即我充滿了形式),因此我需要再次填充它們。

我想要的是:我不需要覆蓋填滿的表單,而只需要收集那些尚未存在於本地存儲中的表單。

我的代碼: 商店: - 代碼:

FMS.stores.onlineTodo = new Ext.data.Store({ 
model: 'ToDoMod', 
proxy: { 
    id : 'fmsonlinetodo', 
    type: 'ajax', 
    url: 'app/data/dummydata.json', 
    reader: new Ext.data.JsonReader({ 
     root: 'items' 
    }), 
    timeout: 2000, 
    listeners: { 
     exception:function() { 
      console.log("I think we are offline"); 
      flagoffline = 1; 
//    
     } 
    } 
} 
}); 

FMS.stores.offlineTodo = new Ext.data.Store({ 
model : 'ToDoMod', 
proxy : { 
    type : 'localstorage', 
    id : 'fmsofflinetodo' 
} 
}); 

控制器功能將數據加載到店:

代碼:

loadDataInitial : function(){ 

    FMS.stores.onlineTodo.addListener('load', function() { 
     console.log("I think we are online"); 
     FMS.stores.offlineTodo.proxy.clear(); 
     FMS.stores.onlineTodo.each(function (record) {       
       FMS.stores.offlineTodo.add(record.data)[0]; 
     }); 
     FMS.stores.offlineTodo.sync(); 
     FMS.stores.offlineTodo.load(); 
     flagoffline = 0; 
    }); 

    if(flagoffline == 0){ 
     FMS.stores.onlineTodo.load(); 
    } 
    else{ 
     FMS.stores.offlineTodo.load(); 
    } 


}, 

HELP !!!!!

回答

0

如果我沒有記錯的話,你是清除所有的localStorage的記錄,當你使用這個:

FMS.stores.offlineTodo.proxy.clear(); 

什麼,你會想要做的就是使用在線商店收集所有的數據庫記錄和那麼對於每條記錄,查詢本地存儲器是否存在相同的記錄,如果存在,則不要更新它。

基本上是一個版本控制的方法,但絕對不清除商店,你會刪除它的一切!

更新:

下面是一些示例代碼:

//load remotestore 
remoteStore.load({ 
    scope: this, 
    callback: function (records, operation, success) { 
     //get record count 
     var localCount = localStore.getCount(); 

     if (localCount == 0) { 
      //iterate each record in remotestore 
      remoteStore.each(function (record) { 
       //add record to localStorage 
       localStore.add(record.copy()); 
      }); 

      //save localstore 
      localStore.sync(); 

     } else { 
      //set count var 
      var count = 0; 

      //iterate each record in remotestore 
      remoteStore.each(function (record) { 
       //reset var 
       var localRecord = null; 
       //find matching record in localstore 
       localRecord = localStore.findRecord('xid', record.data.xid, null, false, false, true); 

       //if the record exists 
       if (localRecord) { 
        //version check 
        if (record.data.version > localRecord.data.version) { 
         //remove record from localstore and add new one 
         localStore.remove(localRecord); 
         localStore.add(record.copy()); 
         //increment counter 
         ++count; 
        } 
       } else { 
        //add record to localstore 
        localStore.add(record); 
       } 
      }); 

      //save localstore 
      if (localStore.sync()) { 
       alert("store saved"); 
      } 

      //if records were added we need to reload 
      if (count > 0) { 
       this.onUpdate();// or whatever your function is. 
      } 
     } 
     } 
    }); //ends 
+0

我該怎麼辦呢? ?我不知道如何查詢相同的記錄,看看它是否存在...你可以給我一些示例代碼或例子嗎? – SashaZd 2012-03-22 04:29:16

+0

一些示例代碼可能? – SashaZd 2013-05-23 17:35:22

+0

給我一天嘗試這個,並回到你的工作是否:) Grazie(提前) – SashaZd 2013-06-12 15:53:45

0
在您的商店的加載方法

,只是通過addRecords:真正的,就像這樣:

FMS.stores.onlineTodo.load({addRecords: true}); 
相關問題