每个都有ember和handlebar中的索引和模数

时间:2013-08-05 11:55:39

标签: loops ember.js handlebars.js each

我正在创建一张幻灯片 - 所以每个div都有3张图片,如此

<div>
  <img />
  <img />
  <img />
</div>

</div>
  <img />
  <img />
  <img />
</div>

互联网上的所有代码都没有完美运作 -

https://github.com/johanpoirier/resthub-backbone-stack/commit/8a318477d56c370d2a0af4da6eae9999c7bb29da

http://jaketrent.com/post/every-nth-item-in-handlebars-loop/

http://rockycode.com/blog/handlebars-loop-index/

http://www.arlocarreon.com/blog/javascript/handlebars-js-everyother-helper/

和是包括堆栈溢出中的答案。

任何人都可以提供一些在当前时期(Ember / Handlebar版本)完美运行的代码吗?

我有一系列模型,所以我想做一些像

这样的事情
{{#each model}}
    {{if index % 3 == 0}}
    {{/if}}
{{/each}}

2 个答案:

答案 0 :(得分:15)

我发现index@index在模板中不起作用,但您可以在帮助程序中访问它。

我在这里做了一个例子来证明这一点:

http://jsbin.com/egoyay/1/edit

修改:添加要回答的代码,演示{{else}}阻止

把手助手(非使用Ember):

Handlebars.registerHelper('ifIsNthItem', function(options) {
  var index = options.data.index + 1,
      nth = options.hash.nth;

  if (index % nth === 0) 
    return options.fn(this);
  else
    return options.inverse(this);
});

用法:

<ol>
 {{#each model}}
   <li>
     {{#ifIsNthItem nth=3}}
        Index is a multiple of 3
     {{else}}
        Index is NOT a multiple of 3
     {{/ifIsNthItem}}
   </li>
 {{/each}}
</ol>

答案 1 :(得分:2)

如果在itemViewClass帮助器中指定each,则会为每个项目创建一个视图并设置contentIndex属性:

{{#each model itemViewClass="Ember.View"}}
    {{view.contentIndex}}
{{/each}} 

在Ember v1.1.0中测试