javascript - Handlebars 动态访问变量

标签 javascript handlebars.js

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

状态:{ 'action-foo-collapsed':1, '操作栏折叠':1 }

在 Handlebars 中,我正在迭代另一个对象,其中的键与 foobar 相对应。

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

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

在不使用自定义助手的情况下,这是否可以实现?

最佳答案

您可以使用Lookup用于动态参数解析的内置助手。但是,您的情况有点复杂,因为您想要连接一些字符串来创建 state 键。如果您的 state 对象具有与其他对象相同的键,那就更容易了。这将允许您执行以下操作:

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

{{/if}}

请注意,上面使用了 Handlebars 的子表达式,它允许我们将 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使用上述两种方法来解决这个问题。

关于javascript - Handlebars 动态访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45431624/

相关文章:

javascript - 限制 react-dropzone 中的图像尺寸

javascript - 传单弹出关闭按钮

javascript - 按日期对对象数组进行排序,其中日期是键

javascript - 迭代并比较两个对象数组的属性

node.js - 有没有办法知道网站的模板引擎?

meteor - 如何将 Handlebars isEq 助手转换为 Meteor 中的空格键?

meteor Handlebars : What is the proper way in a condition to compare two variables?

javascript - kml点击问题

javascript - 了解 .reduce() 中的许多函数参数

javascript - 使用 {{#each}} 迭代 (express-)handlebars 模板中 helper 的字符串数组