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'});
Ответы
Ответ 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
});