每个手柄都嵌套顶级

时间:2017-04-07 18:19:34

标签: javascript handlebars.js each

鉴于此背景

{
  letters: ['a', 'b', 'c'],
  numbers: ['1', '2', '3']
}

我将如何制作

a1
a2
a3
b1
b2
b3
c1
c2
c3

实质上,

{{#each letters}}
{{#each ../numbers}}
what to put here?
{{/each}}
{{/each}}

我专门使用https://github.com/sunng87/handlebars-rust,但理论上这与功能奇偶校验非常接近,因此在handlebars.js中如何完成它应该是兼容的。

作为参考,我的实际用例是C ++代码生成。问题主要在于访问内部循环的this内容。现在我的代码看起来像

{{#each variant}}
{{#each ../typearg}}{{#if @first}}template <{{/if}}{{this}}{{#if @last}}>{{else}},{{/if}}{{/each}}
{{/each}}

但由于某种原因,这会输出

template <>
template <>

当我期待它输出时

template <T>
template <T>

相关且传递给它的对象采用

形式
{
    typearg: [ 'T' ],
    variant: [{ }, { }]
}

1 个答案:

答案 0 :(得分:1)

我认为最好的方法是创建一个新的车把帮助器,它会返回Handlebars.registerHelper('multi_list', function(context, options) { var html = ""; var letters = options.hash.letters; var numbers = options.hash.numbers; for (var i=0; i< letters.length; i++) { for (var j=0; j < numbers.length; j++) { html += '<li>' + (letters[i] + '' + numbers[i] + '</li>'; } } return html; });

{{#multi_list letters numbers}}

你会打电话给帮手

each

如果您仍想使用现有的{{this}}助手进行迭代,则可以使用 {{./this}}{{../this}}访问最里面的循环值和

{{#each variant}} {{#each ../typearg}} {{#if @first}} template < {{/if}} {{this}} {{#if @last}} > {{else}} , {{/if}} {{/each}} {{../this}} {{/each}} 访问最高级别的循环值

Photoshop