2011-12-20 16 views
16

Ho una collezione che restituisce un modello per ogni data all'interno di un determinato intervallo (alimentato attraverso un controller Rails).Principiante backbone: come ottenere il primo modello dalla collezione?

A mio parere per la raccolta, mi piacerebbe visualizzare il mese per il primo appuntamento dalla collezione ... Mi chiedo quale sia il modo più elegante per ottenere questo risultato?

Sembra più semplice accedere alla serie di modelli tramite la raccolta, nab il primo ed eseguire il metodo richiesto all'interno di tale modello per recuperare il nome del mese. Sembra semplice, ma non riesco a capire come annusare il primo modello all'interno della collezione.

In alternativa, potrei passare il valore richiesto tramite la chiamata a router() dai binari, ma sembra un po 'brutto.

Infine, ho potuto creare una collezione completamente nuova solo per il per recuperare quell'unico valore, ma ancora una volta - sembra eccessivo.

Qualche suggerimento su come dovrei fare per farlo? Supponendo che non sia troppo tabù alimentare i dati del modello in una raccolta, suppongo che ti sto chiedendo come farlo.

risposta

47

Backbone.js collezioni hanno accesso ai metodi Underscore.js.

MyCollection.first() dovrebbe restituire il primo modello da una raccolta.

+1

http://documentcloud.github.com/backbone/#Collection-Underscore-Methods e http: // DocumentCloud .github.com/underscore/per ulteriori informazioni. – djlumley

+0

Cosa succede se non stai usando il carattere di sottolineatura, ma un altro motore di template (ad esempio handlebars.js)? Esiste un metodo o pattern backbone.js nativo? – lucke84

+2

@ lucke84 - 'Underscore.js' è una dipendenza difficile, quindi anche se stai usando un altro motore di template (EJS, ECO, Jade, ecc.) Continuerai ad includere' Underscore.js' e dovresti essere in grado di usare i suoi metodi nelle viste (purché consentano di valutare JavaScript.) Nel caso in cui si stia utilizzando un motore di template che non consente la valutazione di Javascript, dovrebbe essere abbastanza semplice impostare una variabile di visualizzazione prima di renderizzare la vista specifica. – djlumley

7
collection.at(0) //etc 

Ma se si controlla se c'è almeno un elemento

if(collection.length){ 
    collection.at(0) //etc 
} 
Problemi correlati