我正在通過一個教程來學習如何使用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控制檯中構建的,但視頻剪輯和集合是在路由器構造函數中分配的。 –