Backbone.js - 通过构造函数传递参数

Ind*_*ial 31 javascript backbone.js

场景:当我(尝试)通过构造函数设置变量时,
我得到了一个alert()说法.但是,如果我取消注释那个生活在myView中的内容,那么警报会改为"内部的Hello",正如人们所期望的那样.undefinedmyVarmyVar

问:
这是否意味着我不能设置任何PARAMS视图的构造,除了骨干网自身参数,可以如model,collection,el,id,classNametagName
手册: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'});
Run Code Online (Sandbox Code Playgroud)

cza*_*aic 57

传递给构造函数的选项会自动存储为 this.options

var myView = Backbone.View.extend({

  myVar : 'Hello from inside',

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

new myView({myVar: 'Hello from outside'});
Run Code Online (Sandbox Code Playgroud)

  • 应该注意的是,在这种情况下,你新创建的视图将具有`this.myVar`和`this.options.myVar`.如果你试图用传递的选项覆盖`this.myVar`,你可能想在你的初始化函数中使用`this.myVar = this.options.myVar`. (11认同)
  • 真棒!从Google快速查找. (3认同)
  • 或者在选项对象上存储`myVar`:`options:{myVar:'Hello from inside'},`.选项将自动合并,并在`this.options`上可用 (2认同)

Bra*_*ave 27

从主干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"
    ...
});
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用此迷你插件自动附加白名单选项,如下所示:

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