将参数传递给Backbone View(id,className等)

时间:2014-02-12 15:41:00

标签: javascript backbone.js backbone-views

我有一些代码可以创建一个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方法并调用它的参数,但我不确定如何正确地执行此操作。而且我认为这也不是一个好方法。

有什么想法吗? - 提前致谢。

2 个答案:

答案 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的相应classNameView属性。

答案 1 :(得分:1)

您似乎没有正确初始化options属性。你应该

initialize: function (opts) {
    this.options = {}; // you were missing this part
    this.options.id = opts.id;
    this.options.className = opts.class;
},