2013-03-14 15 views
6

Qual è il modo migliore per eseguire il bootstrap dei dati per un'app emberjs al caricamento della pagina. So che molto probabilmente otterrà i dati da un attributo data-for o dati all'interno di un div nascosto, ma dove andrebbe questo nel ciclo di vita delle app emberjs?Dati di bootstrap in ember.js

+0

Ci può spiegare l ' "utente torna" parte un po' più in profondità? vale a dire - stai usando la memoria locale o cookie o qualcos'altro nel browser che è disponibile subito (per mostrare alcuni contenuti) prima che la roba $ .ajax avvenga? –

+0

"L'utente ritorna" implica che c'è una sessione. Quindi avrei inserito qualche json nell'html che l'app di ember avrebbe usato per il bootstrap (insieme ad altre informazioni, non solo all'utente). Quello che sto cercando di capire è il miglior posto nel ciclo di vita delle app di ember per afferrare i dati dall'html e usarli. – spullen

risposta

3

Ci sono alcuni tipi diversi di dati che potresti caricare. Sono stato con ember-data modelli con DS.FixtureAdapter (per i dati statici) oppure il DS.RESTAdapter (per i dati dinamici

Questo è un piccolo esempio con apparecchi:.

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

Nelle mie applicazioni (un po 'piccole) Sono appena caricamento dei dati del dispositivo direttamente dopo la definizione del negozio e dei modelli Questo funziona bene per semplici associazioni uno a uno (si pensi ad un elenco statico di tipi o categorie). Quando si usano dati di tipo non fisso viene specificato come attributo model sulla rotta, e viene caricato quando necessario

Aggiornamento

Per precaricare i dati iniziali (ad es. stato iniziale pagina come loggedin) al caricamento della pagina è possibile utilizzare 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

Sto usando il RESTAdapter. Quello che sto cercando di ottenere è come caricare i dati che ho sulla pagina quando eseguo il rendering di tutto inizialmente. Così, ad esempio, ho un utente corrente di cui voglio tenere traccia e voglio caricare l'utente corrente al caricamento della pagina (ad esempio, l'utente chiude la pagina e ritorna più tardi). – spullen

+0

Penso che funzionerà. Sai se Store.load prende gli array? In caso contrario, suppongo che potrei semplicemente eseguire il loop dei dati incorporati e fare un carico di archiviazione per ciascuno. – spullen

+2

Sì, è possibile caricare più di un record alla volta con 'DS.Store.loadMany' (vedere la definizione [qui] (https://github.com/emberjs/data/blob/master/packages/ember-data /lib/system/store.js#L1616) e alcuni test [qui] (https://github.com/emberjs/data/blob/master/packages/ember-data/tests/unit/store_test.js#L211). –