Naprawdę mam dwuczęściowe pytanie.
Konsola mówi mi: „TypeError: this.collection.each nie jest funkcją”
W krótkim okresie chciałbym wiedzieć, dlaczego mój kod nie działa.
W dłuższej perspektywie bardziej interesuje mnie wiedza, dlaczego nie mówi mi, że „każdy” nie jest funkcją, ponieważ jest to metoda, którą próbuję wywołać.
P.S. Potwierdziłem, że JQuery ładuje się poprawnie, a przed załadowaniem tego kodu, więc to nie jest problem.
Odpowiednim javascript jest:
$(function(){
var items = [
{ name: "Abe Lincoln", details: "Is he that guy from that new reality show?"},
{ name: "Captain Planet", details: "He is our hero"},
{ name: "Karthus", details: "Press R"},
{ name: "Your Mom", details: "She misses me"},
{ name: "Teddy Roosevelt", details: "Makes the most interesting man in the world look boring"}
];
var itemsCollectionView = new ListView({collection: items});
Backbone.history.start();
});
var ListView = Backbone.View.extend({
el: "#the-list",
initialize: function(){
this.render();
},
render: function(){
this.collection.each(function(model){
this.addOne(model);
}, this);
},
//create an itemview for a model, and add it to the list view
addOne:function(model){
var itemView = new ItemView({model: model});
this.$el.append(itemView.render().el);
}
});
Odpowiedzi:
5 dla odpowiedzi № 1this.collection.each
dobrze jest używać z Backbone, problem polega na tym, że nie przekazujesz rzeczywistej kolekcji Backbone do instancji ItemView, ale po prostu tablicę. Potrzebujesz czegoś takiego:
var itemsCollection = new ItemsCollection(items), // substitute your collection variable
itemsCollectionView = new ListView({ collection: itemsCollection });
Próbowałem również uruchomić twój kod na Backbone 1.0.0 i jQuery 1.10.1 i dostaję
TypeError: Object [object Array] has no method "each"