2013-03-14 14 views
6

Was ist der beste Weg, um Daten für eine Emberjs App beim Laden der Seite zu laden. Ich weiß, dass es höchstwahrscheinlich die Daten von einem Data-for-Attribut oder von Daten innerhalb eines versteckten divs erhält, aber wo im Lebenszyklus der emberjs-App würde das liegen?Bootstrapping Daten in ember.js

+0

könnten Sie die „Benutzer kommt zurück“ Teil ein wenig mehr in die Tiefe erklären? dh - verwenden Sie lokalen Speicher oder Cookies oder etwas anderes im Browser, der sofort verfügbar ist (um einige Inhalte anzuzeigen), bevor das $ .ajax-Zeug passiert? –

+0

Der "Benutzer kommt zurück" impliziert, dass es eine Sitzung gibt. Also würde ich ein JSON in das HTML eingebettet haben, das die Ember App zum Bootstrappen verwenden würde (zusammen mit anderen Informationen, nicht nur dem Benutzer). Was ich versuche herauszufinden, ist der beste Ort im Lebenszyklus der Glut-App, um die Daten aus dem HTML-Code zu holen und zu verwenden. – spullen

Antwort

3

Es gibt ein paar verschiedene Arten von Daten, die Sie möglicherweise laden. Ich habe mit ember-data Modelle zusammen mit DS.FixtureAdapter (für statische Daten) oder die DS.RESTAdapter (für dynamische Daten

Dies ist ein kleines Beispiel mit Geräten.

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" 
    }]; 

In meinem (eher klein) Apps Ich bin gerade Laden der Fixture-Daten direkt nach dem Definieren des Stores und der Modelle. Dies funktioniert gut für einfache Eins-zu-Eins-Assoziationen (denken Sie an eine statische Liste von Typen oder Kategorien). Bei Verwendung von Nicht-Fixture-Daten wird nur das Attribut model auf der Route angegeben. und wird bei Bedarf geladen

Aktualisierung

Zum Vorladen der Anfangsdaten (z.B. erste Seite Zustand wie LoggedIn) beim Laden der Seite könnten Sie 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

Ich verwende den RESTAdapter. Ich versuche herauszufinden, wie man Daten, die ich auf der Seite habe, lädt, wenn ich zunächst alles rendere. So habe ich zum Beispiel einen aktuellen Benutzer, den ich verfolgen möchte, und ich möchte den aktuellen Benutzer beim Laden der Seite laden (sagen wir, der Benutzer schließt die Seite und kommt später wieder). – spullen

+0

Ich denke, das wird funktionieren. Weißt du, ob Store.load Arrays aufnimmt? Wenn nicht, nehme ich an, ich könnte einfach die eingebetteten Daten durchlaufen und für jeden eine Laden laden. – spullen

+2

Ja, Sie können mehr als einen Datensatz gleichzeitig mit 'DS.Store.loadMany' laden (siehe Definition [hier] (https://github.com/emberjs/data/blob/master/packages/ember-data) /lib/system/store.js#L1616) und ein paar Tests [hier] (https://github.com/emberjs/data/blob/master/packages/ember-data/tests/unit/store_test.js#L211). –