2013-03-14 19 views
6

Jaki jest najlepszy sposób na załadowanie danych do aplikacji emberjs podczas ładowania strony. Wiem, że najprawdopodobniej otrzyma dane z atrybutu danych lub danych w ukrytym dziale div, ale gdzie w tym cyklu życia aplikacji emberjs się to stanie?Dane dotyczące ładowania w pliku ember.js

+0

można wyjaśnić „użytkownik wraca” część nieco bardziej dogłębnie? tzn. czy korzystasz z lokalnej pamięci lub ciasteczek, czy czegoś innego w przeglądarce, która jest dostępna od razu (aby pokazać jakąś treść) przed wydaniem $ .ajax? –

+0

"Użytkownik wraca" oznacza, że ​​jest sesja. Tak więc chciałbym mieć json osadzony w htmlu, który aplikacja ember używałaby do bootstrap (razem z innymi informacjami, nie tylko z użytkownikiem). To, co staram się wymyślić, to najlepsze miejsce w cyklu życia aplikacji ember do pobierania danych z html i używania go. – spullen

Odpowiedz

3

Istnieje kilka różnych rodzajów danych, które mogą być ładowane. I zostały z wykorzystaniem ember-data modeli wraz z DS.FixtureAdapter (dla danych statycznych) lub DS.RESTAdapter (dla danych dynamicznych

Jest to mały przykład za pomocą uchwytów.

App.Store = DS.Store.extend({ 
    revision: 11, 
    adapter: 'DS.FixtureAdapter' 
}); 

App.Page = DS.Model.extend({ 
    title: DS.attr('string') 
}); 

App.Page.FIXTURES = [{ 
    id: 1, 
    title: "Test Title #1" 
    }, { 
    id: 2, 
    title: "Random Title #2" 
    }]; 

W moim (niewielkich) apps jestem po prostu ładowanie danych urządzenia bezpośrednio po zdefiniowaniu sklepu i modeli, działa to dobrze dla prostych powiązań jeden do jednego (pomyśl o statycznej wymianie typów lub kategorii) .Kiedy używasz danych typu non fixture, jest on określony jako atrybut model na trasie, i jest ładowany w razie potrzeby.Aktualizacja

Aby wstępnie wczytać dane początkowe (np. Początkowy stan strona jak loggedin) na stronie obciążenia można użyć DS.Store#load:

Store = DS.Store.create({ 
    revision: 11 
}); 

Page = DS.Model.extend({ 
    title: DS.attr('string') 
}); 

Store.load(Page, {id: 1, title: 'Wow Cool Title'}); 

Store.find(Page, 1).get('title') //=> 'Wow Cool Title' 
+1

Używam RESTAdapter. Próbuję uzyskać, jak załadować dane, które mam na stronie, gdy renderuję wszystko na początku. Na przykład mam bieżącego użytkownika, którego chcę śledzić, i chcę załadować bieżącego użytkownika po wczytaniu strony (powiedzmy, że użytkownik zamyka stronę i wraca później). – spullen

+0

Myślę, że to zadziała. Czy wiesz, czy Store.load pobiera tablice? Jeśli nie, przypuszczam, że mógłbym po prostu zapętlić dane wbudowane i wykonać ładowanie Store dla każdego z nich. – spullen

+2

Tak, możesz załadować więcej niż jeden rekord naraz za pomocą 'DS.Store.loadMany' (patrz definicja [tutaj] (https://github.com/emberjs/data/blob/master/packages/ember-data /lib/system/store.js#L1616) i kilka testów [tutaj] (https://github.com/emberjs/data/blob/master/packages/ember-data/tests/unit/store_test.js#L211). –

Powiązane problemy