2017-08-01 80 views
0

比方说,我有两个项目的对象:把手访问变量动态

state : { 'action-foo-collapsed' : 1, 'action-bar-collapsed': 1 }

在车把上,我遍历另一个对象,其中键与foobar对应。

我想访问对象以动态的方式显示上面,像这样:

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

这是可以实现的,最好不使用自定义的助手?

回答

1

您将使用Lookup内置帮助程序进行动态参数解析。然而,你的情况稍微复杂一些,因为你想连接一些字符串来创建你的密钥。如果您的state对象将相同的键作为您的其他对象,将会更容易。这将允许你做到以下几点:

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

{{/if}} 

注意上面使用把手子表达式,使我们能够通过lookup助手到if助手的结果。

不幸的是,Handlebars没有用于连接字符串的内置帮助器。如果您的state对象的密钥必须与您的问题相同,那么您将需要创建一个可帮助您连接的助手。这样的助手是相当简单的,这里是一个我想出了:

Handlebars.registerHelper('concat', function() { 
    return Array.prototype.slice.call(arguments, 0, -1).join(''); 
}); 

使用这个帮手,我们可以按如下方法访问您的state对象的键:

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

{{/if}} 

仅供参考,我已经创建了一个示例fiddle,它使用上述两种方法来解决此问题。

+0

谢谢。该解决方案确实使用'lookup'并在状态对象中使用相同的密钥。 – Rinux