通过handlebars.js中的动态属性迭代对象

时间:2017-02-10 14:49:44

标签: javascript handlebars.js express-handlebars

我试图通过使用它似乎无法正常工作的动态属性名来迭代对象:

{{#each orders["order" + name] }}

即使这似乎没有效果

{{#each orders["orderDemo"] }}

但这样做:

{{#each orders.orderDemo }}

根据其他条件或迭代处理动态属性名称的任何解决方案?

就我而言,我有:

{{#each types}}
    {{#each orders[type] }}
        <table>....</table>
    {{/each}}
{{/each}}

1 个答案:

答案 0 :(得分:1)

AFAIK Handlebars 不为动态属性提供任何内置支持,但您可以注册一个简单的&#34; Helper函数&#34;像这样:

Handlebars.registerHelper('orders', function(parent,child,options) {
  return parent["order"+child].map(options.fn).join``
});

然后按如下方式使用它:

<ul>
  {{#orders orders name}}
      <li>{{this}}</li>
  {{/orders}}
</ul>

如果您感觉递归,您甚至可以这样做:

Handlebars.registerHelper('forEach', function(parent,expr,options) {
  return parent[Handlebars.compile(expr)(this)].map(options.fn).join``;
});

{{#forEach orders "order{{name}}" }}
    <li>{{this}}</li>
{{/forEach}}

但是如果你有很多数据,这将是一场性能消耗。