您可以在模板中调用任何全局可访问的函数。所以,如果Globalize
是全局的(即 的属性window
),那么这个模板:
<script id="tmpl" type="text/html">
<li>Date: <%= Globalize.format(date, 'F') %></li>
</script>
将使用此 JavaScript:
_.template($('#tmpl').html(), {
date: some_date_that_globalize_understands
});
如果您没有Globalize
全球可用,那么您可以:
window.Globalize = Globalize;
使其全局可用或只是手动将其添加到模板的命名空间:
_.template($('#tmpl').html(), {
Globalize: Globalize,
date: some_date_that_globalize_understands
});
演示:
- 全球
Globalize
通window.Globalize
。.
- 局部
Globalize
通过_.template
参数。.
Underscore 模板真的没有什么特别之处,里面的东西<%= %>
只是包裹在一个with
block中的 JavaScript 代码。您甚至可以通过查看source
返回的模板函数的属性来查看函数的源代码:
var t = _.template($('#t').html());
console.log(t.source);
你会看到一些相当简单(如果丑陋)的 JavaScript,如下所示:
function(obj){
var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};
with(obj||{}){
__p+='\n '+
( Globalize.mangle(pancakes) )+
'\n';
}
return __p;
}
那+ (Globalize.mangle(pancakes) )+
一点就是<%= Globalize.mangle(pancakes) %>
变成了什么。没有魔法,没有特殊的内容解析<%= ... %>
,只是简单(但有效)的 JavaScript 转换。