2013-03-16 11 views
5

Ho un'app ember che interagisce con un'app rails utilizzando la gemma ember-rails.Comando offline app Ember.js

Vorrei utilizzare l'adattatore localStorage per memorizzare un elenco di prodotti una volta che sono stati scaricati dal server sul resto della API.

Quindi, se l'app non è in linea, ember può utilizzare i dati localStorage anziché chiedere all'app rails per i dati.

C'è un modo per farlo?

+0

un modo potrebbe essere la creazione si possiede oggetti del modello piuttosto che usare brace-dati ... – thecodejack

+0

Vorrei utilizzare le funzionalità di brace-dati comunque. Voglio essere in grado di caricare senza problemi i dati da un'API REST in un gruppo di classi di modelli ember senza dover scrivere alcun codice che lo faccia. È persino possibile cambiare l'archivio dati nell'app durante la sua durata? – l33z3r

risposta

3

Ho fatto qualcosa in questo senso. Questo non gestisce quando aggiornare per il caching e cose del genere. Ma, ti fornirà un modo per caricare inizialmente gli elementi da localStorage e, se la rete non è disponibile, il contenuto rimarrà solo come dati locali. Ovviamente puoi ampliarlo notevolmente per gestire le tue esigenze.

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

Ciao, ci proverò! – l33z3r