Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 如何从下划线.js javascript模板库中引用名称中带有句点的JSON属性_Backbone.js_Underscore.js - Fatal编程技术网

Backbone.js 如何从下划线.js javascript模板库中引用名称中带有句点的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

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

{
"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”]
访问该属性,但无法使其工作。谢谢你的回答。