Backbone.js - Wie findet die Ansicht diese Sammlung?
-
25-10-2019 - |
Frage
Ich mache ein Tutorial, um zu lernen, wie man Backbone.js verwendet, und es fällt mir schwer zu verstehen, wie Backbone -Ansichten die Sammlung "sehen".
Im Folgenden finden Sie den Ansichtscode, und darunter befindet sich der Sammelcode.
Ich kann sehen, dass die Variablen $ -Nischs der jeweiligen Klasse '.albums' zugeordnet werden, die innerhalb des Elements liegen, aber ich erhalte nicht, wie dieser Code auf "This.Collection" bezieht.
Sowohl die Ansicht als auch die Sammlung werden von Standard -Backbone.View- und Backbone.Collection -Klassen erweitert. Nur wenn ich es mir ansieht, kann ich nicht sehen, wie sie sich überhaupt kennen. Ich gehe davon aus, dass das Wort "dies" auf diese spezielle Instanz von LibraryView bezieht.
Ich denke, das ist meine Hauptfrage:
Wie kommt es, dass der Code collection = this.collection
Kann die externe Sammlung in der Lage sein?
// 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;
}
});
Hier ist die Albenkollektion:
// Albums Collection
window.Albums = Backbone.Collection.extend({
model: Album,
url: '/albums'
})
BEARBEITEN:
Ich glaube, ich fand es dank der Hilfe hier:
Es gab ein weiteres Code, das eine Bibliotheksvariable erstellte und eine neue Albensammlung zugewiesen hat:
window.library = new Albums();
Außerdem gibt es im Router eine Initialisierungsaussage, die in der Variablen "Bibliothek" übergeht:
initialize: function() {
this.libraryView = new LibraryView({
collection: window.library
});
Jetzt scheint es sinnvoller zu sein. :)
Nur dies zu veröffentlichen, falls jemand anderes so verwirrt ist wie ich.
Lösung
Eine Sammlung müsste an den LibraryView -Konstruktor übergeben werden. Zum Beispiel,
myLibrary = new LibraryView({
collection: new Albums()
})
Hier passiert jedoch ein wichtiges Stück Magie. Alles, was an einen Ansichtskonstruktor übergeht, endet in der Ansicht der Ansicht options
Eigentum. Eine ausgewählte Anzahl von Eigenschaften, wird jedoch auf die Ansicht selbst kopiert. So können Sie sagen this.collection
Anstatt von this.options.collection
.
Diese besonderen Eigenschaften sind:
"Modell", "Sammlung", "El", "ID", "Attribute", "ClassName", "Tagname"