我正在通过一个教程来学习如何使用Backbone.js,并且我很难理解Backbone视图如何“看到”这个集合。Backbone.js - View如何查找此集合?
下面是视图代码,下面是集合代码。
我可以看到变量$ albums被分配给元素内的特定类'.albums',但我不明白这个代码是如何引用'this.collection'的。
视图和集合都从标准的Backbone.View和Backbone.Collection类扩展而来。只是看着它,我看不出他们甚至知道彼此存在。我假设“this”这个词是指这个特定的LibraryView实例。
我想这是我的主要问题:
它是如何的代码collection = this.collection
能够看到外部收集?
// A wrapper view to display each album in Library
window.LibraryView = Backbone.View.extend({
tagName: 'section',
className: 'library',
initialize: function() {
_.bindAll(this, 'render');
this.template = _.template($('#library-template').html());
this.collection.bind('reset', this.render);
},
render: function() {
var $albums,
collection = this.collection;
$(this.el).html(this.template({}));
$albums = this.$('.albums');
collection.each(function(album) {
var view = new LibraryAlbumView({
model: album,
collection: collection
});
$albums.append(view.render().el);
});
return this;
}
});
这里的相册集:
// Albums Collection
window.Albums = Backbone.Collection.extend({
model: Album,
url: '/albums'
})
编辑:
我想我找到了感谢帮助在这里:
有另一块创建库变量并将其分配给新的代码专辑集合:
window.library = new Albums();
此外,在路由器有一个初始化语句通过在“库”变量:
initialize: function() {
this.libraryView = new LibraryView({
collection: window.library
});
现在它似乎更有意义。 :)
只是发布这个以防其他人像我一样困惑。
找到您初始化的地方查看(在路由器?)。你可能会传入收藏。 – Heikki
就是这样 - 谢谢! – PhillipKregg
我也在关注Peepcode教程!并有完全相同的问题。我相信混淆来自于视频中的一次飞跃,其中视图之前是在Chrome控制台中构建的,但视频剪辑和集合是在路由器构造函数中分配的。 –