Доступ к индексу в #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
Ответы
Ответ 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
Ответ 3
Обратите внимание, что в отношении синтаксиса @index конкретно, с октября 2014 года:
Ember не поддерживает @index (или любой другой тип @data Свойства).
https://github.com/toranb/ember-template-compiler/issues/16#issuecomment-38823756
Ответ 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.