我为mandrill设置了基于手柄的电子邮件模板,并尝试从列表列表中呈现JSON数据,其中每个列表最多可包含3个项目。对于每个内部列表,把手迭代,它应该检查索引0,1,2是否有任何东西,如果有的话,用它们做一些事情,如下所示:
{{#each thing}}
{{#if this.thing.[0]}}
Do something here
{{/if}}
{{#if this.thing.[1]}}
Do something here
{{/if}}
{{#if this.thing.[2]}}
Do something here
{{/if}}
{{/each}}
我注意到当迭代的列表只有2个项目时,把手会从最后一个列表中获得3个项目的第3个项目,所以我猜这个。[2]是不是阻止作用域?
例如,如果我使用:
thing = [
["a","b","c"],
["d","e"]
]
我明白了:
Something with "a"
Something with "b"
Something with "c"
Something with "d"
Something with "e"
Something with "c"
我不确定这是一个问题,因为我对两者都是新手,所以这是一个问题,因为我是两个新手。
非常感谢任何帮助
答案 0 :(得分:1)
目前似乎Mandrill更改#each块中的上下文有点滑稽。这不是来自Handlebars,而是 - Mandril的实现(我希望他们能解决它)。如果有2个对象被迭代,第一个有一个属性,而不是第二个(在你的情况下 - > this.thing。[2]) - 当第二个进入范围时,属性不会得到'清除&#39 ;.您可以做的是将其分配给“假”'明确地 -
thing = [
["a","b","c"],
["d","e", false]
];
如果你使用对象而不是数组,这可能会更容易。[2]看起来不如this.c(我假设你的意思是这个。[2]而不是this.thing [2])。例如。使用
thing = [
{ a : true, b : true, c : true },
{ d : true, e : true, c : false}
]
使用相同模板的应该可以正常工作。 {{@key}}可让您访问密钥。
答案 1 :(得分:0)
在我看来,你应该用#each迭代2次,而不是使用#if
这是一个例子
<script id="entry-template" type="text/x-handlebars-template">
{{#each thing}}
{{#each item}}
{{value}}
{{/each}}
{{/each}}
</script>