我有一些代码可以创建一个Backbone.View,基于我传递给它的一些参数,就像这样:
// The Form View
var FormView = Backbone.View.extend({
initialize: function (opts) {
debugger; // This is here only to figure out what gets executed first: if "id" method or "initialize"
this.options = {};
this.options.id = opts.id;
this.options.className = opts.class;
},
id: function () {
debugger; // The application will stop here before the debugger I set in the initialize method
return this.options.id; // options is undefined!
},
className: function () {
return this.options.className; // options is undefined!
}
});
// The params
var params =
fid: "some-form",
class: "form-horizontal"
};
var myForm = new FormView(params);
但this.options
属性始终为undefined
。正如我所看到的,设置视图属性的方法在initialize
方法之前运行。作为一种解决方法,我认为我可以访问de id回调中的initialize方法并调用它的参数,但我不确定如何正确地执行此操作。而且我认为这也不是一个好方法。
有什么想法吗? - 提前致谢。
答案 0 :(得分:3)
为什么不使用通常的方式将选项传递给视图?类似的东西:
var FormView = Backbone.View.extend({
initialize: function () {
this.foo = this.options.foo;
this.bar = this.options.bar;
}
});
var params = {foo: '1', bar: '2'};
var v = new FormView(params);
您也可以作为参数传递{id: '1', className: 'your-class'}
,Backbone会自动将其应用于目标id
的相应className
和View
属性。
答案 1 :(得分:1)
您似乎没有正确初始化options
属性。你应该
initialize: function (opts) {
this.options = {}; // you were missing this part
this.options.id = opts.id;
this.options.className = opts.class;
},