2013-03-16 11 views
5

私はember-railsの宝石を使ってレールアプリとやりとりするemberアプリを持っています。Ember.jsアプリオフラインの動作

残りのAPIを介してサーバからダウンロードした製品のリストを保存するためにlocalStorageアダプタを使用したいと思います。

次に、アプリがオフラインの場合、railsアプリケーションにデータを要求するのではなく、ローカルストレージデータを使用できます。

これを行う方法はありますか?

+0

... – thecodejack

+0

しかし私は、燃えさしデータの機能を使用したいと思います。私は、REST APIのデータをemberモデルクラスの束にシームレスにロードできるようにするために、コードを記述する必要はありません。アプリのデータストアを存続期間中に切り替えることも可能ですか? – l33z3r

答えて

3

私はこれらの行に沿って何かをしました。これは、キャッシュのためにリフレッシュするタイミングなどを処理しません。しかし、最初にlocalStorageから項目をロードし、ネットワークが利用できない場合、コンテンツはローカルデータとしてそのまま残ります。もちろん、これを大幅に拡張してニーズに対応することができます。一つの方法は、あなた自身のモデルオブジェクトを作成するのではなく燃えさしデータを使用している可能性があり

App.PhotoCategories = Ember.Object.extend 

    init: -> 
    @_super() 
    @loadPhotoCategories 

    loadPhotoCategories:() -> 
    # load cached categories from local storage 
    @set 'content', @getFromCache("photoCategories") 

    if @content? 
     if @content.length == 0 
     $.ajax 
      type: "POST"  
      url: "/api/getCategories" 
      success: (data) => 
      if !data.error 
      @set 'content', [] 

      for category in data 
       @pushObject category 

       # save categories to local storage 
       @saveToCache("photoCategories", @content)    

    saveToCache: (key, data) -> 
    if @supportsHtml5Storage() 
     localStorage.setItem(key + '_LastUpdatedAt', new Date()) 
     localStorage.setItem(key, JSON.stringify(data)) 
     true 
    else 
     false 

    getFromCache: (key) -> 
    if @supportsHtml5Storage() 
     data = localStorage[key] 

     if data? 
     JSON.parse(localStorage[key]) 
     else 
     null 
    else 
     null 

    supportsHtml5Storage: -> 
    try 
     return "localStorage" of window and window["localStorage"] isnt null 
    catch e 
     return false 
+1

乾杯、私はこれを試してみよう! – l33z3r