由于集合实际上是一个模型,它具有属性等,就像在这个例子中一样
var Images = Backbone.Collection.extend({
url: 'https://api.myjson.com/bins/4v2d8'
});
var View = Backbone.View.extend({
el: $('.images'),
initialize: function(){
this.listenTo(this.collection, 'sync', this.render, this); // what is this keyword as the last param here?
},
render: function(){
this.collection.each(function(model){
this.$el.append($('<p>'+model.get('name')+'</>' ));
}, this);
}
});
$(function(){
var images = new View({ collection: new Images() });
images.collection.fetch();
});
http://jsbin.com/gohedeguto/edit?html,js,output
但为什么这个不起作用?
http://jsbin.com/seyoyeqeku/edit?html,js,output
我将Collection
替换为Model
并传递给了视图。我得到this.model.each of undefined
。
答案 0 :(得分:2)
虽然T-J是对的,但他并没有详细说明原因。
Backbone模型有很多功能来管理attributes
hash,并且通常由id引用。
Backbone集合是Backbone模型实例的数组。它有一些类似的和许多不同的函数来管理模型实例存储的models
array property。
其中一些功能是Underscore.js功能的代理。
collection.each(iteratee, [context])
是_.each(collection.models, iteratee, [context])
的代理。
Backbone的模型没有each
函数,因为它没有真正意义,并且有更好的方法来遍历模型的属性。
答案 1 :(得分:0)
由于集合实际上是一个模型
没有。这是错误的假设。收集不是一个模型,这就是为什么你的代码不起作用的原因。
模型没有每个方法,并且您的代码会抛出以下错误:
Uncaught TypeError: this.model.each is not a function(…)
并且不要遵循迭代模型属性并打印其名称的其他答案,它没有意义。因为模型应该代表一个实体,就像一个人。它只有一个包含名称的属性,迭代模型属性以访问其中一个属性没有意义,您可以使用get()
方法直接访问它的属性而无需迭代。