48

请查看随附的代码

http://jsbin.com/atuBaXE/2/

我正在尝试使用 {{@index}} 访问索引,但似乎没有编译。我认为车把支持这一点

{{#each item in model}}
  {{@index}} 
  {{item}}
{{/each}}

它不起作用,我不知道是否支持 {{@index}}

我在用

  • Ember.VERSION:1.0.0
  • 车把.版本:1.0.0
4

5 回答 5

136

更新

这个 PR开始,现在可以使用带索引的 each 助手,采用新的块参数语法。这在金丝雀上可用,希望在 ember 1.11 中默认启用

{{#each model as |item index|}}
  <li>
    Index: {{index}} Content: {{item}}
  </li>
{{/each}}

现场样品

对于旧版本

您可以使用{{_view.contentIndex}}.

{{#each item in model}}
  <li>
    Index: {{_view.contentIndex}} Content: {{item}}
  </li>
{{/each}}

现场样品

于 2013-11-05T18:04:49.607 回答
4

不,它在 Ember 的 Handlebars 版本中不存在,一种方法是使用项目控制器并向其添加一个属性,说明它是第一个还是最后一个等。

App.IndexController = Ember.ArrayController.extend({
  itemController: 'itemer'
});

App.ItemerController = Ember.ObjectController.extend({
  needs:['index'],
  isFirst: function(){
    return this.get('color') === this.get('controllers.index.firstObject.color');
  }.property('controllers.index.firstObject')
});

http://emberjs.jsbin.com/aPewofu/1/edit

于 2013-11-05T18:10:16.463 回答
3

请注意,关于 @index 语法,截至 2014 年 10 月:

Ember 不支持@index(或任何其他@data 类型属性)。

https://github.com/toranb/ember-template-compiler/issues/16#issuecomment-38823756

于 2015-02-05T15:35:31.100 回答
2

我喜欢@kingpin2k 的答案——Ember 方式是使用控制器来装饰模型,在这种情况下,我们希望通过添加索引属性来装饰它,以表示它在集合中的位置。

我的做法略有不同,为手头的任务构建了一个单独的实例控制器集合:

App.PostsIndexController = Ember.ArrayController.extend({
  indexedContent: function() {
    get('content').map(function(item, index) {
      App.PostsItemController.create({
        content: item,
        index: index
      });
    });
  }.property('content')
});

App.PostsItemController = Ember.ObjectController.extend({
  index: null
});
于 2014-05-16T20:29:03.650 回答
1

如果您只是想在视图中将索引显示为 1-indexed 值,您还可以试一试 CSS Counters。它们一直支持到 IE 8。

于 2015-04-17T17:38:13.497 回答