Backbone.js 如何从下划线.js javascript模板库中引用名称中带有句点的JSON属性
我正在使用下划线模板引擎(作为Backbone.js的一部分),但JSON对象的属性中有一个句点,即Backbone.js 如何从下划线.js javascript模板库中引用名称中带有句点的JSON属性,backbone.js,underscore.js,Backbone.js,Underscore.js,我正在使用下划线模板引擎(作为Backbone.js的一部分),但JSON对象的属性中有一个句点,即 { "id": 1234, "company.id": 4321 } 当我尝试在下划线模板中访问此内容时,我收到一个JavaScript错误: Company ID: <@= company.id @> 公司ID: 我想知道是否可能以及如何访问带有句点的属性。我无法更改JSON的生成 cowper一种简单的方法是将另一个对象包裹起来,这样您就可以使用[]访问'company.i
{
"id": 1234,
"company.id": 4321
}
当我尝试在下划线模板中访问此内容时,我收到一个JavaScript错误:
Company ID: <@= company.id @>
公司ID:
我想知道是否可能以及如何访问带有句点的属性。我无法更改JSON的生成
cowper一种简单的方法是将另一个对象包裹起来,这样您就可以使用
[]
访问'company.id'
。例如,您的模板可能如下所示:
<script id="tmpl" type="text/html">
id: <%= o.id %><br>
company: <%= o['company.id'] %>
</script>
var html = _.template($('#tmpl').html(), {
o: {
"id": 1234,
"company.id": 4321
}
});
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;
}
演示:
下划线模板编译器使用和
为模板中的
等简单内容提供上下文,因此我认为您将无法比上面的o.
技巧做得更好。下划线根据模板生成函数,您可以通过查看函数的source
属性来查看函数的源代码:
var t = _.template(template_source);
console.log(t.source);
这会给你类似的东西:
<script id="tmpl" type="text/html">
id: <%= o.id %><br>
company: <%= o['company.id'] %>
</script>
var html = _.template($('#tmpl').html(), {
o: {
"id": 1234,
"company.id": 4321
}
});
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;
}
功能(obj){
var\uuu p='';var print=function(){\uu p+=Array.prototype.join.call(参数,'')};
带(obj |{}){
__p+='\n id:'+
(o.id)+
“
公司:”+
(o['company.id'])+
'和内容\n';
}
返回p;
}
您可以看到为什么仅仅
不起作用:只调整当前范围,它无法将[x]
转换为有效的JavaScript。一种简单的方法是将另一个对象包裹起来,这样您就可以使用[]
访问'company.id'
。例如,您的模板可能如下所示:
<script id="tmpl" type="text/html">
id: <%= o.id %><br>
company: <%= o['company.id'] %>
</script>
var html = _.template($('#tmpl').html(), {
o: {
"id": 1234,
"company.id": 4321
}
});
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;
}
演示:
下划线模板编译器使用和
为模板中的
等简单内容提供上下文,因此我认为您将无法比上面的o.
技巧做得更好。下划线根据模板生成函数,您可以通过查看函数的source
属性来查看函数的源代码:
var t = _.template(template_source);
console.log(t.source);
这会给你类似的东西:
<script id="tmpl" type="text/html">
id: <%= o.id %><br>
company: <%= o['company.id'] %>
</script>
var html = _.template($('#tmpl').html(), {
o: {
"id": 1234,
"company.id": 4321
}
});
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;
}
功能(obj){
var\uuu p='';var print=function(){\uu p+=Array.prototype.join.call(参数,'')};
带(obj |{}){
__p+='\n id:'+
(o.id)+
“
公司:”+
(o['company.id'])+
'和内容\n';
}
返回p;
}
您可以看到为什么仅仅
不起作用:只调整当前范围,它无法将[x]
转换为有效的JavaScript。看起来不错。我在某个地方读到了关于与
的用法,但我不知道它是什么,现在仍然不知道。我确实看到可以通过传递{variable:'data'}
或类似的东西来设置正在使用的变量的名称。我得到的印象是,这样做意味着我可以使用数据[“company.id”]
访问该属性,但无法使其工作。谢谢你的回答。看起来不错。我在某个地方读到了关于与
的用法,但我不知道它是什么,现在仍然不知道。我确实看到可以通过传递{variable:'data'}
或类似的东西来设置正在使用的变量的名称。我得到的印象是,这样做意味着我可以使用数据[“company.id”]
访问该属性,但无法使其工作。谢谢你的回答。