Backbone.js - Как представление о поиске этой коллекции?
-
25-10-2019 - |
Вопрос
Я прохожу учебник, чтобы узнать, как использовать Backbone.js, и мне трудно понять, как взгляды магистрали «видят» коллекцию.
Ниже приведен код просмотра, и под этим находится код сбора.
Я вижу, что альбомы переменной $ присваиваются конкретному классу.
И представление, и коллекция расширяются из стандартных классов Backbone.view и Backbone.collection. Просто если смотреть на это, я не вижу, как они даже знают друг друга. Я предполагаю, что слово «это» относится к этому конкретному экземпляру библиотеки.
Я думаю, это мой основной вопрос:
Как получается, что код 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
});
Теперь, кажется, имеет больше смысла. :)
Просто публиковать это на случай, если кто -то еще так запутался, как и я.
Решение
Коллекция должна быть передана в конструктор библиотеки. Например,
myLibrary = new LibraryView({
collection: new Albums()
})
Тем не менее, здесь происходит важная часть магии. Все передано в конструктор представления в заканчивающем options
имущество. Выбранное количество свойств, однако, скопируйте на сам представление. Итак, вы можете сказать this.collection
вместо this.options.collection
.
Эти специальные свойства:
'Model', 'Collection', 'el', 'id', 'attributes', 'classname', 'Tagname'