1

我正在使用下划线模板引擎(作为 Backbone.js 的一部分)并且有一个问题,即 JSON 对象的属性中有一个句点,即

{
"id": 1234,
"company.id": 4321
}

当我尝试在下划线模板中访问它时,我收到一个 JavaScript 错误:

Company ID: <@= company.id @>

我想知道是否有可能以及如何访问带有句点的属性。我无法更改 JSON 的生成。

考珀

4

1 回答 1

4

一种简单的解决方法是将另一个对象包裹在它周围,以便您可以[]使用'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。

于 2012-05-30T00:12:56.960 回答