2012-05-26 43 views
4

我似乎遇到了一個磚牆Backbone.js的/ underscore.js當我嘗試導入模板,看起來像:Backbone.js的/ underscore.js錯誤:有沒有方法「HTML」

<script type="text/template" id="overview_template"> 
<div> 
    Sample text 
</div> 
</script> 

錯誤讀取:

Uncaught TypeError: Object #<HTMLDivElement> has no method 'html' navigation.js:356 
Backbone.View.extend.render navigation.js:356 
Backbone.View.extend.initialize navigation.js:351 
g.View backbone-min.js:33 d backbone-min.js:38 
(anonymous function) navigation.js:379 
f.Callbacks.n jquery-1.7.1.min.js:2 
f.Callbacks.o.fireWith jquery-1.7.1.min.js:2 
e.extend.ready jquery-1.7.1.min.js:2 c.addEventListener.B 

觸發錯誤的代碼是this.el.html(template);在以下:

var OverviewView = Backbone.View.extend({ 
    el: $('#overview_container'), 

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

    render: function() { 
    var template = _.template($("#overview_template").html(), {}); 
    this.el.html(template); 
    }, 

    defaults: { 
    tip_of_the_day: 'open', 
    news: 'open', 
    recent_presentations: 'open' 
    }, 

    events: { 
    "click .overview_subsection_header": "toggleSubsection"  
    }, 

    toggleSubsection: function (event) { 
    $(this).parent().find('.overview_subsection_content').toggle(); 
    } 
}); 

var overview_view = new OverviewView(); 

我不確定是什麼導致了這一點,但它一直讓我瘋狂。

回答

2

您正嘗試將視圖連接到現有元素#overview_container。但是,在瀏覽器初始化DOM之前,肯定會創建視圖類。

由於您的模板存儲在#overview_container,可能您不希望視圖在該元素中呈現?嘗試刪除視圖上的el屬性,並將該視圖的元素附加到頁面中的任何位置。

此外,這是一個骨幹約定從render方法返回this這樣你就可以渲染和輕鬆連接的元素,像這樣:

$(document.body).append((new OverviewView()).render().el); 

可以render在初始化器,如果你喜歡,但它的不是標準的做法。

4

不應該說是

this.$el.html(template);

即。 jQuery包裝el。

7

.html()方法是jQuery對象的方法。當你使用this.el時 - 它是一個DOM對象。讓jQuery對象使用這個$ el(它由backbone.js jQuery對象緩存)或$(this.el)。

所以,你的代碼應該是這樣的:

render: function() { 
    var template = _.template($("#overview_template").html(), {}); 
    this.$el.html(template);  
    } 

render: function() { 
    var template = _.template($("#overview_template").html(), {}); 
    $(this.el).html(template);  
    } 
0

嘗試

this.$el.html(template) 

,而不是

this.el.html(template) 
相關問題