2013-03-16 15 views
5

Ich habe eine Glut App, die mit einer Rails-App mit dem Juwel-Schienen-Juwel interagiert.Ember.js App Offline-Verhalten

Ich möchte den LocalStorage-Adapter verwenden, um eine Liste von Produkten zu speichern, sobald sie vom Server über die Rest-API heruntergeladen wurden.

Wenn die App offline ist, kann Ember die localStorage-Daten verwenden, anstatt die Rails-App nach den Daten zu fragen.

Gibt es eine Möglichkeit, dies zu tun?

+0

eine Art und Weise kann die Erstellung eher Sie besitzen Modellobjekte als die Verwendung von Ember-Daten ... – thecodejack

+0

ich aber die Eigenschaften von Ember-Daten verwenden möchte. Ich möchte in der Lage sein, nahtlos Daten von einer REST-API in eine Reihe von Ember-Modellklassen zu laden, ohne den Code dafür schreiben zu müssen. Ist es sogar möglich, den Datenspeicher während der Laufzeit in Ihrer App zu wechseln? – l33z3r

Antwort

3

Ich habe etwas in dieser Richtung getan. Dies behandelt nicht, wenn für das Zwischenspeichern aktualisiert werden soll, und solche Dinge. Es bietet Ihnen jedoch die Möglichkeit, zunächst Elemente von localStorage zu laden, und wenn das Netzwerk nicht verfügbar ist, bleibt der Inhalt einfach als lokale Daten bestehen. Sie können dies selbstverständlich erweitern, um Ihre Anforderungen zu erfüllen.

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

Prost, ich werde es ausprobieren! – l33z3r