根据索引

时间:2017-01-04 21:06:35

标签: meteor meteor-blaze spacebars

我需要在索引模数为0时打开一行,并在它为1时关闭它,类似于这个想法:

{{each posts}}
    {{#if @index%2==0}}
         <div class="row">
    {{/if}}
             <div class="col-lg-6">HELLO</div>
    {{#if @index%2==1}}
         </div>
    {{/if}}
{{/each}}

当然这个代码/想法并没有编译。我怎样才能实现它?

更新抱歉,也许我没有解释清楚。我想要做的是类似于这个PHP代码,但使用流星。 (更改了一些数字以便更好地理解)。

for($i = 0; $i<count(array); $i++):
    if($i%4 == 0):
        echo '<div class="row">';
    endif;
        echo '<div class="col-lg-3">HELLO</div>';
    if($i%4==3 || $i == count(array) -1):
        echo '</div>';
    endif;
endfor;

我有一个带有帮助器的解决方案,它返回一个二维数组,还有另一种方法。

2 个答案:

答案 0 :(得分:0)

您可以获取索引,然后将其传递给帮助程序以执行您的逻辑。

{{#each posts}}
    {{#if isEven @index}}
         <div class="row">
    {{/if}}
             <div class="col-lg-6">HELLO</div>
    {{#if isOdd @index}}
         </div>
    {{/if}}
{{/each}}


Template.foo.helpers({
    isEven(index) {
        return (index % 2 == 0);
    },
    isOdd(index) {
        return (index % 2 == 1);
    }
});

编辑:

顺便说一下,你的if逻辑在匹配div时看起来不对。我认为你的意思更像是这样:

{{#each posts}}
    {{#if isEven @index}}
         <div class="row">
    {{else}}
         <div class="col-lg-6">HELLO
    {{/if}}
         </div>
{{/each}}

编辑2:

如果Blaze对div的格式化感到困惑,可能会像这样去混淆它。它也更容易阅读:

{{#each posts}}
    {{#if isEven @index}}
         <div class="row">
         </div>
    {{else}}
         <div class="col-lg-6">HELLO
         </div>
    {{/if}}
{{/each}}

答案 1 :(得分:0)

如果你想在中间创建元素,无论如何,我会做这样的事情

{{#each posts}}
    <div class="{{#if isEven @index}}row{{/if}}">
        <div class="col-lg-6">HELLO</div>
    </div>
{{/each}}

其中(类似于@zim建议)isEven将是一个模板助手,将索引作为其参数

Template.hello.helpers({
    isEven(index) {
        return index % 2 === 0;
    }
});