4

我想呈現一個基本骨幹視圖,下劃線模板,但我在嘗試渲染模板時不斷收到以下錯誤。下劃線模板未捕獲ReferenceError變量未定義

未捕獲的ReferenceError:沒有定義

這裏的的jsfiddle:http://jsfiddle.net/rkj6j36n/

HTML

<body> 
    <div class="msg-con"></div> 
</body> 

JS

DumbViewObj = Backbone.View.extend({ 
    el: $('.msg-con'), 
    initialize:function(){ 
     this.render(); 
    }, 
    render: function(){ 
     var template = _.template('I am <%= amount %> dumb',{amount:'200'}); 
     this.$el.append(template); 
    }, 
}); 
var dumb = new DumbViewObj(); 

我敢肯定解決方案是簡單的東西,但我不知道它

+1

每一件事情看起來的要罰款,使用完全相同的代碼http://jsfiddle.net/JQu5Q/7/ – StateLess 2014-09-26 18:40:13

+3

@ aktiv-coder:您使用舊版本的Underscore,不再支持'_.tempate(template_string,template_data)'表單。 – 2014-09-26 21:55:12

+0

Bergi的答案是spot-on - http://stackoverflow.com/q/16977178/104380 – vsync 2016-03-17 14:38:06

回答

14

因爲模板是一個函數和模板(obj)返回您所在的字符串,它不返回字符串後,你打電話它。

你的代碼是做

var xxx = template(); 
this.$el.append(xxx); 

,你應該做的事情

render: function(){ 
    var template = _.template($('#dumb').html()); 
    var vars = {amount:200}; 
    var html = template(vars); 
    this.$el.append(html); 
}, 
3

_.template編譯模板到一個函數。你必須將參數傳遞給所產生的作用進行評估:

在一行
var template = _.template('I am <%= amount %> dumb'); 
    this.$el.append(template({amount:'200'})); 
+0

@ aktiv-coder對不起,我沒有足夠的聲望點評論。您的代碼段正在工作,因爲您正在使用舊版本的下劃線。嘗試使用1.7代替。 – dreyescat 2014-09-26 18:44:39

4

this.$el.append(_.template('I am <%= amount %> dumb')({amount:200})) 
+0

這似乎是舊的下劃線版本的過時解決方案 – 2015-01-18 03:20:50