2011-11-20 13 views
1

我只是在使用sencha touch進行Web應用程序工作。我需要實現離線可用的商店(綁定到網格)(offlineStorage),但只要互聯網連接可用,就會在線獲取&更新數據(REST)。這是必要的,因爲我有很多數據,並且我在商店上做了很多遠程過濾和搜索。我從一開始就無法加載完整商店,因爲它太大。最好我喜歡使用offlineStore來獲得快速的用戶體驗。新的過濾器/請求應該向服務器請求數據(在線商店)並將其更新/添加到offlineStorage以與服務器保持同步。Sencha Touch - 脫機應用程序與offlineStorage同步到在線商店。按需提取在線數據並添加到離線商店

電網< -bind->商店(offlineStorage)新的過濾器 - < - 請求遠程數據>在線商店

我的一個出發點是http://www.sencha.com/learn/taking-sencha-touch-apps-offline/#leave-reply。但是,只要從離線存儲裝載數據或設置了過濾器,我就需要觸發在線商店。

有沒有人實現過這樣的事情呢?任何提示/想法如何實現它?

我真的很感謝你的幫助!

+1

爲了得到它,你希望將數據下載到離線商店。然後,當用戶在應用程序內發出請求時,您想在線獲取新數據,並將這些新數據同步到現有商店中? – YDL

+0

是的,這就是我想要實現的! – Manuel

回答

3

在Sencha Touch中,通過將提取的數據「同步」和在線商店與另一個「離線」商店非常容易。

定義脫機存儲:

// Offline store (local storage) 
    var schouwLijstOffline = new Ext.data.Store({ 
     model: "schouwLijst", 
     storeId: 'schouwLijstOffline', 
     proxy: { 
      type: 'localstorage', 
      id: "schouwid" 
     }, 
    }); 

現在,您可以使用您的主存儲中的監聽器(第一讀取數據),並聽取了負載事件(在這種情況下,因爲「自動加載的手動觸發:假「

在裝載機你‘清()’的該offlinestore的代理,然後填充與數據脫機存儲」 STOREID「* 。新增() *功能。

在我的例子中,我刪除了'offlinestore'中的所有信息,因爲我不再需要它了(它現在在脫機狀態。

網上商店與聽衆:

var schouwLijstStore = new Ext.data.Store({ 

      model: "schouwLijst", 
      storeId: "schouwLijstStore", 
      proxy: { 
       type: 'ajax', 
       url: 'php/json.php?t=list', 
       reader: { 
        type: 'json', 
        root: 'list' 
       }, 
      },  
      autoLoad: false, 
      listeners: { 
       load: function() { 

        // Clear proxy from offline store 
        schouwLijstOffline.proxy.clear(); 

        // Loop through records and fill the offline store 
        this.each(function(record) { 

         schouwLijstOffline.add(record.data); 

        }); 

        // Sync the offline store 
        schouwLijstOffline.sync(); 

        // Remove data from online store 
        schouwLijstStore.removeAll(); 

       } 

      } 

     }); 

現在,當你做一個新的請求,以獲取新的過濾器/數據可以重複同樣的過程:

  • 觸發在線商店(storeId.update( );)
  • 監聽器增加了從在線商店的數據到offlinestore
  • 使用offlinestore

補充:

要從一個商店,你可以使用刪除所有數據:storeId.removeAll();

我認爲這會讓你沿着正確的方向前進,如果有什麼不清楚的,請說出來。