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.

War es hilfreich?

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"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top