Javascript 手柄可动态访问变量

Javascript 手柄可动态访问变量,javascript,handlebars.js,Javascript,Handlebars.js,假设我有一个包含两项的对象: 状态:{ “操作foo崩溃”:1, “操作栏已折叠”:1 } 在Handlebar中,我正在迭代另一个对象,其中键对应于foo和bar 我希望以动态方式访问如上所示的对象,如下所示: {{{#if@root.state['action-'@key'-collapsed']}} 这是否可以实现,最好不使用自定义帮助程序?您可以使用内置帮助程序进行动态参数解析。但是,您的情况稍微复杂一些,因为您希望连接一些字符串来创建状态键。如果您的状态对象与另一个对象具有相同的键,则

假设我有一个包含两项的对象:

状态:{
“操作foo崩溃”:1,
“操作栏已折叠”:1
}

在Handlebar中,我正在迭代另一个对象,其中键对应于
foo
bar

我希望以动态方式访问如上所示的对象,如下所示:

{{{#if@root.state['action-'@key'-collapsed']}}

这是否可以实现,最好不使用自定义帮助程序?

您可以使用内置帮助程序进行动态参数解析。但是,您的情况稍微复杂一些,因为您希望连接一些字符串来创建
状态
键。如果您的
状态
对象与另一个对象具有相同的键,则会更容易。这将允许您执行以下操作:

{{#if (lookup @root.state @key)}}

{{/if}}
请注意,上面使用了Handlebar的子表达式,它允许我们将
查找
帮助程序的结果传递给
if
帮助程序

不幸的是,Handlebar没有用于连接字符串的内置帮助程序。如果
状态
对象的键必须与问题中的键相同,则需要创建一个允许连接的帮助器。这样的助手相当简单,我想到了一个:

Handlebars.registerHelper('concat', function () {
    return Array.prototype.slice.call(arguments, 0, -1).join('');
});
使用此帮助程序,我们可以访问
状态
对象的键,如下所示:

{{#if (lookup @root.state (concat 'action-' @key '-collapsed'))}}

{{/if}}

作为参考,我创建了一个使用上述两种方法解决此问题的示例。

谢谢。解决方案实际上是使用
查找
,并在state对象中使用相同的键。