我的骨干下划线模板不起作用。我从服务器获得了一个带有名称的变量返回
month-total
。模板引擎将处理为两个变量的算术运算。
如何将此视为单个变量。
感谢
答案 0 :(得分:1)
通过将模板转换为JavaScript函数,可以使用下划线模板。像<%= x %>
这样的事情直接进入那个功能未被触及;然后该函数使用JavaScript的with
来使对象中的键行为类似于局部变量。来自fine manual:
默认情况下,模板会通过
with
语句将数据中的值放在本地范围内。
您可以使用已编译模板函数的source
属性来查看JavaScript,如果我们使用<%= a-b %>
这样的简单模板执行此操作,您就会明白为什么将其视为减法:
// Reformatted for readability
function(obj) {
var __t,
__p = '',
__j = Array.prototype.join,
print = function() { __p += __j.call(arguments, ''); };
with(obj || {}) {
__p += '\n ' + ((__t = ( a-b )) == null ? '' : __t ) + '\n';
}
return __p;
}
演示:http://jsfiddle.net/ambiguous/6rPnB/
在那里,您可以看到with
和原始a-b
减法表达式。
现在您知道出了什么问题,您如何解决?立即出现三种可能性:
"a_b": 6
而不是"a-b": 6
等更好的内容。with
设置绕过variable
语句。对于最后一个,您可以将模板修改为更像这样:
<%= data['a-b'] %>
使用以下内容编译模板:
var t = _.template(template_text, undefined, { variable: 'data' });
然后像往常一样调用编译模板函数。您不必使用data
作为您的名字,只需确保模板和variable
设置一致。