2011-09-18 135 views
6

我是Sencha Touch的新手,對數據處理模式還不太確定。我想要設置我的應用程序的方式如下所示:Sencha觸摸存儲同步

  1. 通過AJAX從遠程服務器檢索用戶數據。

  2. 將其保存在本地存儲中。任何修改(編輯,添加,刪除項目)都會更新本地數據。

  3. 在某個時間點(當用戶點擊「同步」,當用戶註銷時,或類似的東西),本地存儲的存儲數據將通過請求AJAX與服務器再次同步。

那麼,什麼將我的應用程序的基本結構是,實現這種模式?而且,當我們在這裏時,是否有一種方法可以在Sencha Touch中爲指定商店使用本地數據庫(而不是本地鍵值存儲)?

+1

我現在得到了同樣的情況。 – Neutralizer

回答

8

首先Sencha.IO Sync提供了您正在尋找的功能。它仍然處於測試階段,但它可能會完全符合你的需求,你不必自己託管數據庫: http://www.sencha.com/products/io

對我來說,我已經構建了使用localstorage代理在本地存儲數據的應用程序。這很容易。這裏有一對夫婦使用的數據存儲的例子:

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

在app後來我有一個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

+0

美麗地回答。 –

+0

我看起來像Sencha.io是內部雲解決方案。它會在你用Sencha編程的設備之間同步。但是,如果您希望在Sencha應用程序和REST服務器之間進行同步(Rails可能?),那麼沒有_sync_可用,就像其他系統一樣。除非我對sencha有錯,否則您只有三種選擇:在線存儲,離線存儲或只讀脫機緩存。沒有讀/寫離線緩存,就像你要做一個雙向同步的期望。 – Sukima