2011-12-20 10 views
16

Tengo una colección que devuelve un modelo para cada fecha dentro de un rango determinado (alimentado a través de un controlador Rails).Backbone Novato: cómo obtener el primer modelo de la colección?

En mi opinión para la colección, me gustaría mostrar el mes de la primera fecha de la colección ... Me pregunto cuál es la forma más elegante de lograrlo.

Parece que lo más sencillo sería acceder al conjunto de modelos a través de la colección, capturar el primero y ejecutar el método requerido dentro de ese modelo para recuperar el nombre del mes. Parece sencillo, pero no puedo entender cómo atrapar al primer modelo dentro de la colección.

Alternativamente, podría pasar el valor requerido a través de la llamada al enrutador() desde los rieles, pero eso parece un poco feo.

Finalmente, podría hacer una colección completamente nueva solo para recuperar ese valor, pero de nuevo, parece excesivo.

¿Alguna sugerencia sobre cómo debo hacer esto? Asumiendo que no es demasiado tabú alimentar los datos del modelo en una colección, supongo que estoy preguntando cómo hacerlo.

Respuesta

47

Backbone.js colecciones tienen acceso a los métodos Underscore.js.

MyCollection.first() debe devolver el primer modelo de una colección.

+1

http://documentcloud.github.com/backbone/#Collection-Underscore-Methods y http: // DocumentCloud .github.com/subrayado/para más información. – djlumley

+0

¿Qué sucede si no está utilizando el guión bajo, pero otro motor de plantillas (por ejemplo, handlebars.js)? ¿Hay algún método o patrón nativo backbone.js? – lucke84

+2

@ lucke84 - 'Underscore.js' es una dependencia dura, por lo que incluso si está utilizando otro motor de plantillas (EJS, ECO, Jade, etc.), seguirá incluyendo' Underscore.js' y debería poder usar sus métodos en sus vistas (siempre que permitan que se evalúe Javascript). En el caso de que esté utilizando un motor de plantillas que no permita la evaluación de Javascript, debería ser una cuestión bastante sencilla de establecer una variable de vista antes de representarlo la vista específica. – djlumley

7
collection.at(0) //etc 

Pero si usted tiene que comprobar si hay al menos un elemento

if(collection.length){ 
    collection.at(0) //etc 
} 
Cuestiones relacionadas