Позиционный индекс в итерации коллекции Ember.js

Есть ли способ получить позиционный индекс во время итерации в ember.js?

{{#each itemsArray}} {{name}} {{/each}} 

Я ищу способ получить что-то вроде:

 {{#each itemsArray}} {{name}} - {{index}}th place. {{/each}} 

Обновить:

В соответствии с комментарием @ebryn приведенный ниже код работает без использования вложенного представления для каждого элемента:

  {{#collection contentBinding="App.peopleController"}} Index {{contentIndex}}: {{content.name}} 
{{/collection}} ​

http://jsfiddle.net/WSwna/14/

Хотя иметь что-то вроде adjustIndex, требуется nested представление.

    Это старый вопрос, но до сих пор много хитов. В текущей версии Ember.JS можно использовать _view.contentIndex для отображения текущего индекса внутри цикла.

     {{#each}} Index: {{_view.contentIndex}} {{/each}} 

    Если вам нужен скорректированный индекс (например, начиная с 1), тогда существует возможность создания многоразового вспомогательного increment

     Ember.Handlebars.registerBoundHelper('increment', function(integer) { return integer + 1; }); 

    то вы будете использовать его следующим образом

     {{#each}} Index: {{increment _view.contentIndex}} {{/each}} 

    Обновить

    Начиная с ember 1.11 вы также можете сделать

     {{#each people as |person index|}} Index: {{increment index}} {{/each}} 

    В RC6 CollectionView предоставляет contentIndex для каждого визуализированного представления коллекции. Each помощник использует CollectionView в своей реализации, поэтому вы можете получить доступ к индексу таким образом:

     {{#each itemsArray}} {{_view.contentIndex}} {{/each}} 

    Фактически да, вы можете получить позицию текущего индекса с помощью помощника {{each}}. Вы должны создать представление для каждого элемента в списке, а затем использовать {{_parentView.contentIndex}} .

      

     App = Ember.Application.create(); App.peopleController = Ember.ArrayController.create({ content: [ { name: 'Roy' }, { name: 'Mike' }, { name: 'Lucy' } ] }); App.PersonView = Ember.View.extend(Ember.Metamorph, { content: null, // Just to show you can get the current index here too... adjustedIndex: function() { return this.getPath('_parentView.contentIndex') + 1; }.property() }); 

    См. Этот jsFiddle для рабочего примера.

    Начиная с Ember 9.8 и pre-1.0 вы можете обернуть «contentIndex» представлением, чтобы получить виртуального родителя ({{#each}}). Если вы не добавляете представление, ваш контекст становится либо основным шаблоном, либо элементом в вашем списке, либо тем, что вы вручную установили с помощью {{#with}} . Невозможно попасть на {{#each}} со стороны JS, но это гораздо больший боль, перелистывающий эти дочерние представления.

     {{#each App.peopleController}} {{#view}} Index {{view._parentView.contentIndex}}: {{name}} 
    {{/view}} {{/each}} ...OR... {{#each people in App.peopleController}} {{#view}} Index {{view._parentView.contentIndex}}: {{people.name}}
    {{/view}} {{/each}}

    В любом случае вы хотели бы скрипача.

    DEMO

    Примечание. Вы можете создать представление и сделать this.get("_parentView.contentIndex") чтобы получить индекс, если вы хотите вообще изменить номер.

    В настоящее время это не особенность Handlebars или Ember.Handlebars . У нас есть contentIndex ansible внутри #collection / Ember.CollectionView . Я думаю, что это полезно для поддержки в #each . Пожалуйста, зарегистрируйте проблему в репозитории GitHub: https://github.com/emberjs/ember.js/issues

    Начиная с Ember 1.11.0, index является необязательным параметром в each блоке:

     {{#each items as |item index|}} {{item.name}} is at index {{index}} {{/each}} 

    Я изменил бит решение ud3323, используя коллекцию. Посмотрите здесь: http://jsfiddle.net/johngouf/WSwna/13/

      App = Ember.Application.create(); App.peopleController = Ember.ArrayController.create({ content: [ { name: 'Roy' }, { name: 'Mike' }, { name: 'Lucy' } ] }); App.PersonView = Ember.View.extend({ content: null, // Just to show you can get the current index here too... adjustedIndex: function() { return this.getPath('_parentView.contentIndex') + 1; }.property() }); 

    Я думаю, вы, вероятно, тоже могли бы сделать что-то подобное

     //add index property to all each queries Handlebars.registerHelper('each', function(context, block) { var ret = ""; for(var i=0, j=context.length; i 
    Interesting Posts

    Использование Process Monitor для отслеживания изменений реестра

    Понимание регулярного выражения в Java: split (“\ t”) vs split (“\\ t”) – когда они оба работают, и когда они должны использоваться

    Рисование нескольких строк в D3.js

    Запретить белый экран перед загрузкой страницы в хром?

    Быстрее объемных вставок в sqlite3?

    Как вы добавляете псевдо classы в элементы с помощью jQuery?

    PHP-тернарный оператор против оператора нулевой коалесценции

    Получить все столбцы из всех таблиц MySQL

    Связывание даты Grails с параметрами в controllerе

    Excel VBA autofilter все, кроме трех

    Как я могу получить новый сеанс браузера при открытии новой вкладки или окна в Firefox / Chrome?

    Android Java – Joda Date работает медленно

    Цвет фона элемента меню навигации для выбранного элемента

    Android: навигационная панель для всех видов деятельности

    Как включить ошибки привязки в исключения во время выполнения?

    Давайте будем гением компьютера.