2011-05-12 10 views
5

mam kolejny skrypt:jak dostać model z kolekcji

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)); 

Dlaczego "games.get (0)" powrót 'niezdefiniowane'? Czy mogę używać metody get w niewłaściwy sposób?

Odpowiedz

8

Krótkie i słodkie, trzeba:

games.at(0) 

.get jest dla atrybutów.

5

AFAICT get() na modelach jest dla atrybutów, ale w przypadku, gdy mamy do czynienia ze zbiorem, co oznacza get() brzmi: „Wirtualny model z kolekcji, określonego przez id”

E.g.

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

Ponieważ nie dostarczyły id podczas wprowadzania nowej gry Tetris, Backbone wygeneruje jeden na własną rękę, co nie jest prawdopodobne „0”.

Jednak w twoim przypadku at(index) wydaje się być tym, którego szukałeś, moją odpowiedzią było po prostu wyjaśnienie rzeczy.

E.g.

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

To jest najbardziej dokładna odpowiedź. Drugi taki, jaki jest, pomija bardzo ważną kwestię, że kolekcje mają również funkcję '.get (id)'. – jmk2142

+0

To jest świetna odpowiedź, ale nie jestem w stanie dowiedzieć się, jak wywołać metodę na zwróconym modelu. Sądziłem, że mógłbym zrobić coś takiego: 'collection.at (0) .methodName();' Ale jest niezdefiniowane. Jakieś pomysły na temat tego, co robię źle? – dug

+0

Wyliczyłem to. Właściwie to działało poprawnie, sama metoda po prostu nie zwracała niczego, więc gdy się go logowało, otrzymywałbym "niezdefiniowany", co uważałem za równoznaczne z brakiem metody. Po prostu nie odzyskał nic z tej metody. – dug

Powiązane problemy