骨幹

2013-06-27 122 views
1

動態UI元素創建我有動態生成this.ui元素的骨幹:骨幹

var View = Backbone.View.extend({ 
el : '[data-container]', 
ui : { 
//Needs to be dynamically generated 
}, 

這是我要做的事至今:

this.ui.protocolSetter = new $.fn.init("#protocol-" + id); 

那做工精良。現在的問題我怎麼能做同樣的事情,但使用自定義屬性。

如果我有這樣的HTML5數據屬性: 按鈕數據的東西=「1」類型=「按鈕」 ...

和我想的元素,但與自定義屬性動態綁定。

到目前爲止,我已經嘗試了多種組合,包括變化:

this.ui.protocolSetter = new $.fn.init.(e.currentTarget.dataset.something); 

this.ui.protocolSetter = new $.fn.init.find("[data-something='" + id + "']"); 

但是沒有什麼似乎工作至今。我做錯了什麼?

這裏是小提琴來說明問題更清楚:

jsfiddle.net/vA2N4

+0

您可以發佈一些代碼來說明問題嗎?當你使用它時,你是否遇到了ui對象沒有合適的jquery對象的問題?我的想法是,您的jquery可能會在解析視圖時執行,而不是在呈現時...所以#protocol元素將不會呈現 – MattyP

+0

Hello Matty。 DOM已呈現並準備就緒。我成功使用HTML元素的ID將其綁定到UI對象。話雖如此,我肯定DOM已經準備好了。例如,相同的元素具有ID和數據(html5自定義)。我可以使用ID綁定它,但問題是我不知道如何使用自定義屬性綁定它。 我在第一個問題中插入的HTML由於某種原因沒有顯示,所以讓我嘗試重新創建它,希望它能夠提供我面對的問題的更清晰的解釋。

+0

也許在jsfiddle.net或jsbin.com上的一個小演示會有所幫助。現在我們看不到有足夠的幫助。 –

回答

2

也許你正在尋找的東西更是這樣的:

newBinder: function(e) { 
    var id = e.currentTarget.id.replace(/^btn-/, ''); 
    this.ui.protector = this.$('[data-something=' + id + ']'); 
} 

注意,我切換到replaceid中提取數字,這可能比parseInt更可靠。我也切換到this.$以將選擇器本地化到視圖的el,這可以避免嘗試查找尚未添加到DOM的東西的問題。

我還建議您在構造函數中創建ui而不是視圖「class」的一部分。這:

initialize: function() { 
    this.ui = { }; 
} 

會給視圖的每個實例自己的ui,而這一點:

var View = Backbone.View.extend({ 
    ui : { }, 
    //... 

將附加ui到視圖的原型,因而一個ui將由視圖的所有實例共享。這對你來說可能不是問題,但壞習慣是壞習慣。

演示:http://jsfiddle.net/ambiguous/wNkqK/

+0

只要我達到15分,我會投票!這將很快!!!。 – Emilly

+0

@Emilly:不用擔心,我並不完全捱餓:) –