车把中的每个嵌套顶层

Nested top level each in handlebars

鉴于此背景

{
  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: [{ }, { }]
}

我认为最好的出路是创建一个新的车把助手,它将 return 你 html

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}}