2011-12-11 80 views
30

场景:
我得到了一个alert()undefined当我(试图)通过设置构造函数中myVar变量。但是,如果我取消注释在myView内部的myVar,则该警报将改为“来自内部的Hello”,正如人们所期望的那样。Backbone.js的 - 传递参数的构造函数,通过

问:
这是否意味着我不能设置任何PARAMS除了骨干网自身参数,可以如modelcollectionelidclassName & 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'}); 

回答

56

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

var myView = Backbone.View.extend({ 

    myVar : 'Hello from inside', 

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

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

神奇。在手册中完全错过了! – Industrial

+11

应该指出的是,在这种情况下,您新创建的视图将具有'this.myVar'和'this.options.myVar'。如果你想通过传递选项来覆盖'this.myVar',你可能需要在初始化函数中设置this.myVar = this.options.myVar。 – czarchaic

+3

太棒了!从Google快速查找。 –

24

为骨干1.1.0中,options说法是no longer attached自动到视图(见issue 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" 
    ... 
}); 

或者您可以使用this mini plugin来自动连接白名单选项,就像这样:

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