Вопрос

Я прохожу учебник, чтобы узнать, как использовать 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'

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top