2015-09-10 41 views
1

我正在創建一個新的燼應用程序。我想使用最新版本的ember-data。 (燼數據2.0)。我希望它是一個移動web應用程序。因此它必須處理可變的網絡訪問甚至離線。 我希望它可以在本地存儲所有數據,並在脫機時使用該數據,以便用戶獲得與網絡連接無關的相同體驗。燼數據2.0和離線

是否能夠處理離線案例的燼數據2.0?我只是做一個適配器檢測離線/在線,然後做....?

還是我必須使自己在中間層隱藏離線從灰燼數據處理?

有問題解決了嗎?我發現了一些,但是有沒有最新版本的ember-data?

+0

看看http://guides.emberjs.com/v2.0.0/models/persisting-records/ - 特別是'find'方法。 'findRecord'和'findAll'將首先在本地緩存中查找 - 所以如果你在線時填充它,你會沒事的。您也可以在稍後聯機時緩存「創建」的記錄以進行提交。 – elithrar

+0

@elithrar,所以你是說離線是由本地數據處理?任何限制?尺寸?緩存的生命週期?如果用戶關閉瀏覽器並再次打開它會怎麼樣? –

+0

您將受到本地存儲容量的限制(通常每個域5MB,在瀏覽器重新啓動時保持不變),您將需要處理如何顯示「本地保存但未實際提交」的數據。顯然有一些邊緣案例需要解決 - 很難準確知道它對你來說有多容易,因爲它取決於讀取或寫入應用程序的方式。 – elithrar

回答

0

如果設備將脫機和用戶將嘗試過渡到航線,爲此,模型還沒有加載,你將有一個錯誤。你需要自己處理這些情況。例如,您可以創建一個包含錯誤消息和刷新按鈕的好頁面。要做到這一點,你需要:

首先,在應用程序路徑,創建錯誤動作(它會趕上模式掛接期間的錯誤),並在發生錯誤時,保存到內存過渡。不要嘗試爲本任務使用本地存儲,只會保存屬性,而我們需要實際的轉換對象。使用window.failedTransition或注入控制器並路由一個簡單的對象,該對象將包含失敗的轉換。

actions: { 
    error: function (error, transition) { 
    transition.abort(); 
    /** 
    * You need to correct this line, as you don't have memoryStorage 
    * injected. Use window.failedTransition, or create a simple 
    * storage, Iy's up to you. 
    */ 
    this.get('memoryStorage').set('failedTransition', transition); 
    return true; //This line is important, or the whole idea will not work 
    } 
} 

二,創建一個錯誤控制器和模板。在誤差控制器定義操作,retry

actions: { 
    retry: function() { 
    /** 
    * Correct this line too 
    */ 
    var transition = this.get('memoryStorage').getAndRemove('failedTransition'); 
    if (transition !== undefined) { 
     transition.retry(); 
    } 
    } 
} 

最後,在錯誤模板顯示狀態和錯誤的文本(如果任何可用的),並與該動作重試的轉變的按鈕。

這是(只是幾秒鐘下線裝置)進行簡單的情況下,一個簡單的解決方案,也許你會需要的東西的方式更加複雜。如果您希望您的應用程序在沒有網絡訪問權限的情況下完全工作,則您可能需要使用本地存儲(有一個插件https://github.com/funkensturm/ember-local-storage)用於所有數據並隨時與服務器同步(即每隔10秒在後臺同步數據) 。不幸的是我沒有嘗試過這樣的事情,但我認爲這是可能的。