2011-05-12 15 views
5

tengo la siguiente secuencia de comandos:cómo obtener el modelo de la colección

var Game = Backbone.Model.extend({}); 

var GamesCollection = Backbone.Collection.extend({ 
    model: Game 
}); 

var games = new GamesCollection(); 

var portal = new Game({name: 'Tetris', year: '2017'}); 
games.add(portal); 

console.log(games.get(0)); 

¿Por qué "games.get (0)" retorno 'indefinido'? ¿Puedo usar el método get no de la manera correcta?

Respuesta

8

corto y dulce, que necesita:

games.at(0) 

.get es para los atributos.

5

AFAICT get() en los modelos es de atributos, pero en su caso que se trata de una colección, lo que significa get() es:

"conseguir un modelo de una colección, especificado por id."

E.g.

collection.get(1); // Get model with id = 1 from collection 

Debido a que usted no ha suministrado una identificación cuando se hizo el nuevo juego de Tetris, Backbone generará uno por su cuenta, lo que probablemente no es "0".

Sin embargo, en su caso at(index) parece haber sido el que usted buscó, mi respuesta fue solo para aclarar las cosas.

E.g.

collection.at(0); // Get model at collection index 0 
+0

Esta es la respuesta más precisa. El otro como es, pasa por alto el punto muy importante de que las colecciones también tienen una función '.get (id)'. – jmk2142

+0

Esta es una gran respuesta, pero no puedo averiguar cómo llamar a un método en el modelo devuelto. Supuse que podía hacer algo como: 'collection.at (0) .methodName();' Pero no está definido. ¿Alguna idea sobre lo que estoy haciendo mal? – dug

+0

Lo descubrí. En realidad, funcionaba correctamente, el método en sí mismo no devolvía nada, así que cuando lo registraba me ponía "indefinido", lo que significaba que no estaba encontrando el método. Simplemente no recuperaba nada del método. – dug

Cuestiones relacionadas