假设我有一个包含两个项目的对象:state : { 'action-foo-collapsed' : 1, 'action-bar-collapsed': 1}
在车把中,我正在迭代键与foo
和bar
对应的另一个对象。
我想以一种动态方式访问上述对象,如下所示:{{#if @root.state['action-' @key '-collapsed']}}
如果不使用自定义帮助程序,这是否可以实现且可取?
最佳答案
您可以使用Lookup内置帮助器进行动态参数解析。但是,您的情况有些复杂,因为您想连接一些字符串以创建state
键。如果您的state
对象具有与其他对象相同的键,则会更容易。那将允许您执行以下操作:
{{#if (lookup @root.state @key)}}
{{/if}}
请注意,上面使用了Handlebars的Subexpressions,它使我们可以将
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,该示例使用上述两种方法来解决此问题。