Подтвердить что ты не робот

Доступ к индексу в #each в emberjs

Пожалуйста, проверьте прикрепленный код

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

Я пытаюсь получить доступ к индексу с помощью {{@index}}, но не похоже, что он компилируется. Я думаю, что руль поддерживает это

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

Это не помогает, я не могу понять, поддерживается ли {{@index}} или нет

Я использую

  • Ember.VERSION: 1.0.0
  • Handlebars.VERSION: 1.0.0
4b9b3361

Ответ 1

ОБНОВЛЕНИЕ

Так как этот PR, теперь можно использовать каждый помощник с индексом, продвигаясь к синтаксису новых блоков. Это доступно на канарейке и, надеюсь, будет включено по умолчанию в 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}}

Живой пример

Ответ 2

В 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

Ответ 4

Мне нравится ответ от @kingpin2k. The Ember Way должен использовать контроллер для украшения модели, и в этом контексте мы хотим украсить его, добавив свойство индекса, чтобы представить его место в коллекции.

Я делаю это несколько иначе, создавая отдельную коллекцию контроллеров экземпляров, украшенных для задачи:

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

Ответ 5

Если вы просто хотите отобразить индекс как 1-индексированное значение в своем представлении, вы также можете дать CSS Counters выстрел, Они поддерживаются вплоть до IE 8.