包含“.”的变量 把手中的角色?

jov*_*van 1 handlebars.js

我正在使用车把模板。如果我想在 hbs 文件中插入变量,我将其添加为{{var_name}}.

问题是,我有一个大对象,其键的格式类似于:

{
    "stats.name":"John",
    "stats.performance.day":123,
    "stats.performance.month":4567,
    "company":"My LLC"
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试将它们添加到 Handlebars 文件中,那么只会显示{{company}}, {{stats.name}}, {{stats.performance.day}}, {{stats.performance.month}}它们。{{company}}所有其他值都显示为空白,我认为是因为“。” 是《Handlebars》中的一个特殊角色。

我的问题是,有没有办法覆盖它,或者我实际上需要迭代这个对象并更改每个“。” 在将其传递给 Handlebars 使其工作之前,先将其转换为“_”或其他内容?

764*_*484 7

我建议重命名您的属性。点表示法是 JavaScript 中访问对象属性的两种方法之一。典型的代码如下所示obj.prop:如果你的对象的键不是有效标识符,那么你必须使用括号表示法obj['my-prop']。由于点是属性访问器,因此在属性名称中很少见到点。如果我遇到编写为 的代码obj['stats.performance.date'],我会认为这是一个错误,并且这obj.stats.performance.date是有意的。

话虽如此,Handlebars确实支持引用不是有效标识符的属性。这称为“段文字表示法”,它就像用方括号括住标识符一样简单:

{{[stats.performance.day]}}
Run Code Online (Sandbox Code Playgroud)

该文档还指出:

JavaScript 风格的字符串 " 和 ' 也可以与 [ 配对使用。

因此以下替代方案是有效的:

{{"stats.performance.day"}}
{{'stats.performance.day'}}
Run Code Online (Sandbox Code Playgroud)