2013-03-16 15 views
5

Mam aplikację ember, która współpracuje z aplikacją szyn przy użyciu klejnotu ember-rails.Zachowanie w trybie offline aplikacji ember.js

Chciałbym użyć adaptera localStorage do przechowywania listy produktów po ich pobraniu z serwera przez pozostałe api.

Następnie, jeśli aplikacja jest w trybie offline, ember może używać danych localStorage, zamiast pytać o dane aplikacji rails.

Czy istnieje sposób, aby to zrobić?

+0

jednym ze sposobów może być stworzenie jesteś właścicielem obiektów modelu zamiast używać ember-data ... – thecodejack

+0

chciałbym korzystać z funkcji Cienia-danych jednak. Chcę móc płynnie ładować dane z interfejsu API REST do grupy klas modelu embera bez konieczności pisania kodu, który to robi. Czy jest możliwe nawet wyłączenie magazynu danych w aplikacji podczas jego trwania? – l33z3r

Odpowiedz

3

Zrobiłem coś wzdłuż tych linii. Nie obsługuje tego, kiedy należy odświeżyć pamięć podręczną i takie rzeczy. Zapewni to jednak sposób początkowego ładowania elementów z localStorage, a jeśli sieć nie jest dostępna, zawartość pozostanie jako dane lokalne. Możesz oczywiście rozszerzyć to znacznie, aby sprostać twoim potrzebom.

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

Pozdrawiam, spróbuję tego! – l33z3r

Powiązane problemy