2011-04-30 272 views
0

從骨幹文檔:渲染問題

所有意見必須在所有時間(el的屬性)DOM元素,無論他們已經被插入到頁面或沒有。

我有以下非常簡單的JavaScript文件:

CBBItem = Backbone.Model.extend(
{ 
}); 

CBBTrackItem = Backbone.View.extend(
{ 
    template: _.template("<span><%= title %></span>"), 

    initialize: function() 
    { 
    _.bindAll(this, "render"); 
    }, 

    render: function() 
    { 
    $(this.el).html(this.template(this.model.toJSON())); 
    return this; 
    } 
}); 

而且HTML頁面是這樣的:

<script type="text/javascript"> 
$(function() 
{ 
    var itm1 = new CBBItem({ title: 'track 1'}); 
    var itmUI1 = new CBBTrackItem({ model: itm1, id: "kzl" }); 
    itmUI1.render(); 
}); 
</script> 

<body> 
    <div id="kzl"></div> 
</body> 

我認爲項目不希望渲染雖然有創建的div在頁面上。我可以用很多方式欺騙這種情況。例如,做這樣的事情

var itm1 = new CBBItem({ title: 'track 1'}); 
var itmUI1 = new CBBTrackItem({ model: itm1, id: "big_kzl" }); 
$(itmUI1.render().el).appendTo("#kzl"); 

但是,爲什麼主要案件無法正常工作?

回答

1

這裏有一種可能性:你沒有爲視圖設置el,所以它不知道如何處理你的模板。你能修改你的視圖調用代碼看起來像這樣嗎?

var itmUI1 = new CBBTrackItem({ 
    model: itm1, 
    id: "big_kz1", 
    el: "#kz1" 
}); 
itmUT1.render(); 

或者,如果值永不變化,您可以在視圖的初始化範圍內設置el值。這樣做的好處是視圖的調用者不必知道這些信息,因此視圖更加獨立。

0

在構建過程中傳遞ID和事件等值時遇到問題,而不是在擴展期間定義它們。你可能想檢查一下,看看你是否在尋找差異。

1

如果文檔已經有了您想要用作特定視圖的el的元素,那麼您必須在視圖初始化時手動將該dom元素設置爲el屬性。骨幹爲您提供了沒有捷徑。