2011-12-11 81 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 
}); 
相關問題