我的骨干下划线模板不起作用。我从服务器得到一个变量返回,它有一个名字
month-total
。模板引擎将其视为两个变量的算术运算。如何将其视为单个变量。谢谢
问问题
1107 次
1 回答
1
下划线模板通过将模板转换为 JavaScript 函数来工作。<%= x %>
诸如直接进入该功能的事情不受影响;然后该函数使用 JavaScriptwith
使对象中的键表现得像局部变量。来自精美手册:
默认情况下,模板
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
在 JSON 中。 - 在加载时或在将数据交给模板之前,将传入的 JSON 映射到更友好的内容。
- 使用(记录的)设置绕过
with
语句。variable
对于最后一个,您需要修改模板,使其看起来更像这样:
<%= data['a-b'] %>
用这样的东西编译模板:
var t = _.template(template_text, undefined, { variable: 'data' });
然后像往常一样调用编译后的模板函数。你不必使用data
你的名字,你只需要确保模板和variable
设置一致。
演示:http: //jsfiddle.net/ambiguous/eYn9m/
于 2013-06-06T23:14:17.667 回答