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

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

在车把中,我正在迭代键与foobar对应的另一个对象。

我想以一种动态方式访问上述对象,如下所示:

{{#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,该示例使用上述两种方法来解决此问题。

09-30 16:20
查看更多