Javascript 在emberjs中访问#中的每个索引

Javascript 在emberjs中访问#中的每个索引,javascript,ember.js,handlebars.js,Javascript,Ember.js,Handlebars.js,请查看所附代码 我试图使用{{@index}}访问索引,但似乎没有编译。我认为车把支持这一点 {{#each item in model}} {{@index}} {{item}} {{/each}} 它不适用于,我不知道{@index}是否受支持 我正在使用 版本:1.0.0 把手。版本:1.0.0 更新 因为,现在可以在索引中使用each-helper,同时使用新的block-params语法。这在金丝雀上可用,希望在ember 1.11中默认启用 {{#each model

请查看所附代码

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

{{#each item in model}}
  {{@index}} 
  {{item}}
{{/each}}
它不适用于,我不知道{@index}是否受支持

我正在使用

  • 版本:1.0.0
  • 把手。版本:1.0.0

更新

因为,现在可以在索引中使用each-helper,同时使用新的block-params语法。这在金丝雀上可用,希望在ember 1.11中默认启用

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

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

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')
});

我喜欢@kingpin2k的答案——余烬方法是使用控制器装饰模型,在本文中,我们希望通过添加索引属性来装饰模型,以表示其在集合中的位置

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

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
});

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

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


如果您只是想在视图中将索引显示为单索引值,您也可以试一试。它们可以追溯到IE 8。

我认为你写的东西真的很棒,我相信任何人都会利用它。这两个控制器是否存在耦合过紧的危险?不是危险,而是缺乏可重用性。这一切都取决于用例。有没有办法获得1索引值?例如,对于n个项的数组,第一个项应返回1(不是0),最后一个项应返回n(不是n-1)。我认为唯一的方法是将模型包装在带有索引的计算属性中,如果每个块中的项目都被更新,例如通过更改其排序顺序来更新,则与此类似。contentIndex不会为所有项目更新,并可能导致不正确的索引值。徽标是否支持块语法
=作为|项索引|
的每个模型对我来说都不起作用。@loostro我创建了一个帮助器,它只是增加传入的数字,以获得基于1的索引:跟踪入:
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
});