我正在使用下划线模板引擎(作为 Backbone.js 的一部分)并且有一个问题,即 JSON 对象的属性中有一个句点,即
{
"id": 1234,
"company.id": 4321
}
当我尝试在下划线模板中访问它时,我收到一个 JavaScript 错误:
Company ID: <@= company.id @>
我想知道是否有可能以及如何访问带有句点的属性。我无法更改 JSON 的生成。
考珀
我正在使用下划线模板引擎(作为 Backbone.js 的一部分)并且有一个问题,即 JSON 对象的属性中有一个句点,即
{
"id": 1234,
"company.id": 4321
}
当我尝试在下划线模板中访问它时,我收到一个 JavaScript 错误:
Company ID: <@= company.id @>
我想知道是否有可能以及如何访问带有句点的属性。我无法更改 JSON 的生成。
考珀
一种简单的解决方法是将另一个对象包裹在它周围,以便您可以[]
使用'company.id'
. 例如,您的模板可能如下所示:
<script id="tmpl" type="text/html">
id: <%= o.id %><br>
company: <%= o['company.id'] %>
</script>
和你的 JavaScript 是这样的:
var html = _.template($('#tmpl').html(), {
o: {
"id": 1234,
"company.id": 4321
}
});
演示: http: //jsfiddle.net/ambiguous/wtLkP/1/Underscore
模板编译器用于with
为模板中的简单事物提供上下文,<%= x %>
所以我认为您不会做得更好比o.
上面的把戏。Underscore 从您的模板构建一个函数,您可以通过查看函数的source
属性来查看函数的源代码:
var t = _.template(template_source);
console.log(t.source);
这会给你这样的东西:
function(obj){
var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};
with(obj||{}){
__p+='\n id: '+
( o.id )+
'<br>company: '+
( o['company.id'] )+
' and stuff\n';
}
return __p;
}
你可以看到为什么<%= [x] %>
不起作用:with
只调整当前范围,它不能[x]
变成有效的 JavaScript。