2013-04-16 31 views
0

使用underscore.js和鬍鬚風格函數調用可以使用嗎?該underscore.js manual具有示例如何支持髭語法:使用underscore.js模板的鬍鬚風格功能評估

_.templateSettings = { 
    interpolate : /\{\{(.+?)\}\}/g 
}; 

var template = _.template("Hello {{ name }}!"); 
template({name : "Mustache"}); 
=> "Hello Mustache!" 

然而,除了變量mustache.js也自動當對象是一個功能檢測,然後計算它。從mustache.js手冊:

var view = { 
    title: "Joe", 
    calc: function() { 
    return 2 + 4; 
    } 
}; 

var output = Mustache.render("{{title}} spends {{calc}}", view); 

但是,使用underscore.js呈現在後者的結果:

var template = _.template("{{title}} spends {{calc}}"); 
template(view); 
"Joe spends function() { 
    return 2 + 4; 
}" 

回答

0

下劃線的模板函數不執行類型檢查,並始終返回的值屬性/變量。

https://github.com/documentcloud/underscore/blob/master/underscore.js#L1161

但是你可以使用下劃線模板評估塊運行JavaScript功能。

所以,你可以做到以下幾點:

var template = _.template("<% var spend = calc() %>{{title}} spends {{ spend }}"); 

這顯然是使用默認的ERB風格的評價塊,可以隨意寫你自己的evaluate正則表達式中_.templateSettings如果你想用不同的語法。

0

最簡單的方法是評估函數,因爲Underscore允許模板塊內的任意JavaScript。

var template = _.template("{{title}} spends {{calc()}}"); 
+0

我想保持符合Mustache庫的語法。 – Jeroen