Accessing Index in #each in emberjs

匿名 (未验证) 提交于 2019-12-03 01:12:01

问题:

Hello everyone please check out the code attached

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

I am trying to access the index using {{@index}} but not seems to be compiling. I think handlebars supports that

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

It is not working out for, I can't figure out if the {{@index}} is supported or not

I am using

Ember.VERSION : 1.0.0 Handlebars.VERSION : 1.0.0

Thanks

回答1:

UPDATE

Since this PR, it's now possible to use the each helper with index, taking advance of the new block params syntax. This is available on canary and hopefully will be enabled by default in ember 1.11

{{#each model as |item index|}}   
  • Index: {{index}} Content: {{item}}
  • {{/each}}

    Live sample

    FOR OLD VERSIONS

    You can use {{_view.contentIndex}}.

    {{#each item in model}}   
  • Index: {{_view.contentIndex}} Content: {{item}}
  • {{/each}}

    Live sample



    回答2:

    No it doesn't exist in Ember's version of Handlebars, one way is to use an item controller and add a property to it saying whether it's the first or last etc.

    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:

    Note, regarding the @index syntax specifically, as of October 2014:

    Ember does not support @index (or any of the other @data type properties).

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



    回答4:

    I like the answer from @kingpin2k--The Ember Way is to use a controller to decorate a model, and in this context we want to decorate it by adding an index property to represent its place in the collection.

    I do it slightly differently, by building a separate collection of instance controllers decorated for the task at hand:

    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:

    If you're just looking to display the index as a 1-indexed value in your view, you could also give CSS Counters a shot. They are supported all the way back to IE 8.



    标签
    易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
    该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!