根据this question,可以使用Handlebars rc1执行类似的操作:
{{#each links}}
<li>{{@index}} - {{url}}</li>
{{/each}}
{{@index}}
基本上会为您提供迭代索引,这在创建表时非常有用。
当我使用Ember.js rc3尝试此操作时,我收到意外的令牌错误。这不再适用了吗?它有用吗?是否有其他方法可以获得迭代索引?
答案 0 :(得分:1)
它看起来像was possible。无法让它与HBS RC3一起使用。可能已被弃用。
这是“手写”HBS helper。
答案 1 :(得分:1)
这可以帮助您使用{{index}}获取索引,并且您可以分别知道是否分别使用{{first}}和{{last}}对数组的第一个或最后一个对象进行迭代。 / p>
Ember.Handlebars.registerHelper("foreach", function(path, options) {
var ctx;
var helperName = 'foreach';
if (arguments.length === 4) {
Ember.assert("If you pass more than one argument to the foreach helper, it must be in the form #foreach foo in bar", arguments[1] === "in");
var keywordName = arguments[0];
options = arguments[3];
path = arguments[2];
helperName += ' ' + keywordName + ' in ' + path;
if (path === '') {
path = "this";
}
options.hash.keyword = keywordName;
} else if (arguments.length === 1) {
options = path;
path = 'this';
} else {
helperName += ' ' + path;
}
options.hash.dataSourceBinding = path;
// Set up emptyView as a metamorph with no tag
//options.hash.emptyViewClass = Ember._MetamorphView;
// can't rely on this default behavior when use strict
ctx = this || window;
var len = options.contexts[0][path].length;
options.helperName = options.helperName || helperName;
options.contexts[0][path].map(function(item, index) {
item.index = index;
item.first = index === 0;
item.last = index === len - 1;
})
if (options.data.insideGroup && !options.hash.groupedRows && !options.hash.itemViewClass) {
new GroupedEach(ctx, path, options).render();
} else {
return Ember.Handlebars.helpers.collection.call(ctx, Ember.Handlebars.EachView, options);
}
});
这可以像
一样进行测试{{#foreach array}}
{{log index first last}}
{{/foreach}}
答案 2 :(得分:0)
我最近遇到了同样的问题我写完一个绑定帮助器并通过Binding传递它们的对象例如这里的项目是一个ember DS.Store对象和内容是控制器的“内容”。希望它
Ember.Handlebars.registerBoundHelper 'isPair', (content, options)->
item = options.hash.item
content_name = options.hash.content || 'content'
if @get(content_name).indexOf(item) % 2 == 0 then 'is-pair' else 'is-unpair'
并在你看来你称之为
{{isPair content itemBinding='order'}}
我不知道这是不是你想要的,但它可能会给你一些如何在你的项目中使用它的想法。
顺便说一句。 Ember会覆盖#each helper,这就是为什么它没有@index我想是