2012-03-07 59 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}); 
相关问题