Sencha Touch 同步并从服务器获取新数据
Posted
技术标签:
【中文标题】Sencha Touch 同步并从服务器获取新数据【英文标题】:Sencha Touch Sync and Get New Data from Server 【发布时间】:2012-03-07 09:30:54 【问题描述】:我的应用是需要完成的待办事项列表。
-
打开应用程序后,它会转到服务器并(从数据库)收集要完成的表单列表。
当您单击表单时,您可以填写数据(使用 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();
,
求助!!!!!!
【问题讨论】:
【参考方案1】:如果我没记错的话,当你使用这个时,你正在清除所有的 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
【讨论】:
我该怎么做??我不确定如何查询相同的记录以查看它是否存在...您能给我一些示例代码或示例吗?? 给我一天的时间试试这个,然后回复你它是否有效 :) Grazie(提前) @SashaZd 请注意,此代码用于 ST2.0,可以简化和改进。例如,您可能希望使用模型实例而不是直接在商店中使用。还要考虑模型是否有任何关联,因为此代码没有。 :)【参考方案2】:在你的 store 的 load 方法中,只传 addRecords:true,像这样:
FMS.stores.onlineTodo.load(addRecords: true);
【讨论】:
以上是关于Sencha Touch 同步并从服务器获取新数据的主要内容,如果未能解决你的问题,请参考以下文章