比方说,我有两个项目的对象:把手访问变量动态
state : { 'action-foo-collapsed' : 1, 'action-bar-collapsed': 1 }
在车把上,我遍历另一个对象,其中键与foo
和bar
对应。
我想访问对象以动态的方式显示上面,像这样:
{{#if @root.state['action-' @key '-collapsed']}}
这是可以实现的,最好不使用自定义的助手?
比方说,我有两个项目的对象:把手访问变量动态
state : { 'action-foo-collapsed' : 1, 'action-bar-collapsed': 1 }
在车把上,我遍历另一个对象,其中键与foo
和bar
对应。
我想访问对象以动态的方式显示上面,像这样:
{{#if @root.state['action-' @key '-collapsed']}}
这是可以实现的,最好不使用自定义的助手?
您将使用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,它使用上述两种方法来解决此问题。
谢谢。该解决方案确实使用'lookup'并在状态对象中使用相同的密钥。 – Rinux