Sencha Touch 存储同步

Posted

技术标签:

【中文标题】Sencha Touch 存储同步【英文标题】:Sencha Touch storage sync 【发布时间】:2011-09-18 04:03:59 【问题描述】:

我是 Sencha Touch 的新手,但对它的数据处理模式仍然不太自信。我想设置我的应用程序的方式是这样的:

    通过 AJAX 从远程服务器检索用户数据。

    将其保存在本地存储中。任何修改(编辑、添加、删除项目)都会更新本地数据。

    在某个时间点(当用户单击“同步”、当用户注销或类似情况时),本地存储的数据再次通过请求 AJAX 与服务器同步。

那么,为了实现这种模式,我的应用程序的基本结构是什么?而且,当我们在这里时,有没有办法在 Sencha Touch 中为指定的存储使用本地数据库(而不是本地键值存储)?

【问题讨论】:

【参考方案1】:

首先,Sencha.IO Sync 提供了您正在寻找的功能。它仍处于测试阶段,但它可能会完全满足您的需求,并且您不必自己托管数据库: http://www.sencha.com/products/io

对我来说,我已经构建了使用 localstorage 代理在本地存储数据的应用程序。这非常容易。以下是使用数据存储的几个示例:

    http://www.sencha.com/learn/taking-sencha-touch-apps-offline/ http://data-that.blogspot.com/2011/01/local-storage-proxy-with-sencha-touch.html http://davehiren.blogspot.com/2011/09/sencha-touch-working-with-models.html http://www.sencha.com/learn/working-with-forms/

稍后在应用程序中我有一个 AJAX 调用,它将获取所有本地数据并将其发送到服务器以生成一些报告。

一旦您正确设置了商店和模型,就很容易从中取回数据。例如,我有一个只有一个条目的 contactInfo 商店:

var myContactInfo = contactInfo.first().data;

我有另一个名为 settings 的商店,里面有很多条目。我可以像这样轻松地检索它们(尽管可能有更好的方法):

var settingsArr = []
settings.each(function() 
    settingsArr.push(this.data);
);

然后我可以像这样轻松地将它发送到服务器:

var data = settings: settingsArr, contactInfo: myContactInfo;
Ext.Ajax.request(
url: 'save.php',
params: json: Ext.encode(data),
success: function(response, opts) 
       // celebrate

);

与所有事情一样,一旦您了解了基础知识,请仔细查看示例和 API 应该会对您有所帮助: http://dev.sencha.com/deploy/touch/docs/?class=Ext.data.Store

【讨论】:

我看起来 Sencha.io 是一个内部云解决方案。它将在您使用 Sencha 编程的设备之间同步。但是,如果您希望在 Sencha 应用程序和 REST 服务器(可能是 Rails?)之间进行同步,那么就没有像其他系统那样可用的 sync 了。除非我对 sencha 有误,否则您只有三个选择:在线存储、离线存储或只读离线缓存。没有像您期望的双向同步的读/写离线缓存。

以上是关于Sencha Touch 存储同步的主要内容,如果未能解决你的问题,请参考以下文章

Sencha Touch 同步并从服务器获取新数据

为啥 Sencha Touch 没有同步回调?

Sencha Touch 商店同步回调

Sencha Touch : 更改存储中所有记录的值

CRUD & JsonP / Sencha Touch 2

从 Sencha Touch 2 跨域更新到外部服务器