2012-10-04 48 views
1

我定義DOM元素的列表,像這樣一個骨幹視圖對象的屬性:我如何申報骨幹jQuery的元素雖然DOM是尚未加載

el : $("body"), 
elTicket : $('#ticket'), 
... 

然而,DOM是這些jquery對象指向的還沒有生成。

我以前做的時候這種問題的出現是包裝jQuery對象中的函數,像那麼回事吧:

el : function(){ 
    return $('body'); 
}, 
... 

,然後在一個醜陋線的結果,例如:

this.el().append('dasd'); 

有沒有更好的解決方案呢?

回答

6

the doc例子所示,您應該使用選擇(而不是jQuery的對象)作爲值Backbone.View性質:

App.MyView = Backbone.View.extend({ 
    el: 'body', 
    elTicket: '#ticket', 
    ... 
}); 
+0

不錯,但是,我想僅僅消除美元和花括號 – nimrod

+0

這不是如何骨幹.js被設計爲可以使用。 – 34m0

1

這是很難給出一個全面的回答不知道的情況下,但我會鼓勵你從另一個角度來看問題。

在body標籤的情況下,在body載入到DOM之後運行你的代碼。您可以通過將腳本標籤放在HTML文件的末尾來執行此操作,或者使用其中一個ifDocumentLoaded函數並在其中調用您的主幹代碼。

如果主文檔已經加載,並且您剛剛選擇了body作爲您的問題的示例 - 比方說,標記是div。您可以在尚未加載到DOM的元素上調用JQuery。會發生什麼是JQuery創建此元素,但它不附加到DOM。您可以稍後在機會正確時附加它 - 也許使用像$(body).append(this.el)這樣的查詢方法。

請注意,el屬性默認是一個普通的舊DOM元素,預計會響應特定的視圖。所以你可以有:

App.MyView = Backbone.View.extend({ 
    tagName: 'table', 
    ... 
}); 

自動你可以訪問App.MyView.el。它將是一個未標記的DOM元素,其標記名稱爲表格。現在,如果你想申請一些Jquery魔術到這個DOM元素,你可以通過App.MyView訪問它。$ el