"这"似乎从把手中的旧迭代中有价值"每个"帮手(在mandrill模板中使用)

时间:2016-02-26 03:04:29

标签: templates handlebars.js mandrill

我为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"

我不确定这是一个问题,因为我对两者都是新手,所以这是一个问题,因为我是两个新手。

非常感谢任何帮助

2 个答案:

答案 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>

https://jsfiddle.net/ChristopheThiry/y1nmx738/