Подтвердить что ты не робот

Backbone.js - передача аргументов через конструкторы

Сценарий:
Я получил alert() сообщение undefined, когда я (попытаюсь) установить переменную myVar через конструктор. Однако, если я раскомментирую myVar, который живет внутри myView, предупреждение затем вместо этого говорит "Привет изнутри", как и следовало ожидать.

Вопрос:
Означает ли это, что я не могу установить какие-либо параметры в конструкторе представления, кроме собственных параметров, таких как model, collection, el, id, className и tagName?
Руководство: http://documentcloud.github.com/backbone/#View-constructor

Код:

var myView = Backbone.View.extend({

    //myVar : 'Hello from inside',

    initialize: function() {
        alert(this.myVar);
    }
)};

new myView({myVar: 'Hello from outside'});
4b9b3361

Ответ 1

Параметры, переданные в конструктор, автоматически сохраняются как this.options

var myView = Backbone.View.extend({

  myVar : 'Hello from inside',

  initialize: function() {
      alert(this.options.myVar);
  }
)};

new myView({myVar: 'Hello from outside'});

Ответ 2

Как и в случае с базой 1.1.0, аргумент options автоматически не прикрепляется к виду (см. вопрос 2458 для обсуждения). Теперь вам нужно прикрепить параметры каждого вида вручную:

MyView = Backbone.View.extend({
    initialize: function(options) {
        _.extend(this, _.pick(options, "myVar", ...));
        // options.myVar is now at this.myVar
    }
});

new MyView({
    myVar: "Hello from outside"
    ...
});

В качестве альтернативы вы можете использовать этот мини-плагин для автоматического прикрепления опций, перечисленных в белом списке, например:

MyView = BaseView.extend({
    options : ["myVar", ...] // options.myVar will be copied to this.myVar on initialize
});