2013-11-23 100 views
0

我試着傳遞一些參數來查看構造函數。傳遞參數來查看

我以這種方式創建我的對象:new HeadCell({isSortable: true, parent: this});

所以在HeadCell初始化:

initialize: function(options){ 
    console.log("HeadCell initialized"); 
    console.log(options); 
    console.log(options.isSortable); 
} 

控制檯輸出爲:

HeadCell initialized
Object {isSortable: true, parent: r}

Uncaught TypeError: Cannot read property 'isSortable' of undefined

任何想法?

更新1

林嘗試運行在撥弄一個小測試,結果是一樣的。

http://jsfiddle.net/ramiromd90/hHFP3/

更新2

我嘗試撥弄你的例子,和正常工作!但是,在我的代碼不起作用。

在這裏與我的實際代碼一個小例子小提琴:

http://jsfiddle.net/ramiromd90/XCK47/

更新3

感謝所有的答覆,問題是,我不傳遞迴路參數(見小提琴)。傳遞參數的方法我們說的是正確的!由於

+0

工作正常(http://jsfiddle.net/ambiguous/3HTq2/),你能提供你的問題的演示? –

+0

@ muistooshort我用一個小提琴示例更新線程。 – ramiromd

+2

你有'initialize:function(){'在你的小提琴中,但'initialize:function(options){'在你的問題中,後者工作正常(http://jsfiddle.net/ambiguous/bcU57/)。視圖不會自動設置'this.options',它在版本1.1中被刪除了:http://backbonejs.org/#changelog –

回答

4

在提琴的代碼不正確,因爲你調用this.options時的選項參數是永遠初始化爲視圖對象的一部分。換句話說,你打電話給一個不存在的財產

試試這個:

$(function(){ 
    var Aview = Backbone.View.extend({ 
     initialize: function(options){ 
      console.log(options.foo); 
      console.log(options.bar); 
     } 
    }); 

    new Aview({foo:'isFoo!',bar:'isBar!'}); 
}); 

現在,讓我們進入什麼實際發生,當你把它作爲參數傳遞給構造函數的參數選項多一點細節。

按照doc

有跡象表明,如果獲得通過,將直接連接到視圖幾個特殊選項:模型,收藏,薩爾瓦多,ID,類名,標籤名,屬性和事件。

這是什麼意思?那麼,options參數實際上在視圖構造函數中有兩種使用方式。

首先,它使用此調用

_.extend(this, _.pick(options, viewOptions)); 

僅返回包含在viewOptions特殊選擇一個新的對象,然後添加到視圖對象的那些選項設置特殊選項

接下來,一旦添加了這些特殊選項,它就會調用初始化函數。

this.initialize.apply(this, arguments); 

在這種情況下,它相當於調用

currentViewObject.initialize({anOptionsAttribute: 'hello'}); 

它允許您訪問選項對象無論是作爲一個參數,或者通過arguments對象。正如你所看到的,選項參數並沒有被設置爲一個屬性,因此調用this.options只是無意義的。

1
View = Backbone.View.extend({ 
    initialize: function(options){ 
    console.log(options); 
    console.log(options.isSortable); 
    } 
}); 

var view = new View({isSortable: true, parent: this }); 

http://jsfiddle.net/sbjaz/2/

我不明白爲什麼它不工作。你檢查過拼寫嗎?

「this.options」骨幹輾轉1.1.0 看到:

http://backbonejs.org/#upgrading

In 1.1, Backbone Views no longer have the options argument attached as this.options automatically. Feel free to continue attaching it if you like.

+0

我發佈了一個小提琴,比如推薦Colin(使用this.options)並且不爲我工作。 – ramiromd

+0

我認爲你使用的是舊版本的backbonejs。我嘗試了與主幹1.0相同的小提琴,它的工作非常好。 –

+0

等,我錯了。這個選項只存在於舊版骨幹網中,並且你使用的是最新版本,默認情況下它沒有這個選項。我更新了我的小提琴:http://jsfiddle.net/sbjaz/2/ –