如何在itemController中获取index属性

时间:2014-01-24 03:43:16

标签: javascript ember.js

这种情况:

{{#each array itemController="testController"}}

我想在itemController中使用index属性:

App.TestController = Ember.ObjectController.extend({
   // Is there any way to get index in this controller
})

或者我可以像#each这样发送一个属性:

{{#each array itemController="testController" property=index}}

由于

=============================================== =======================

更新:

我确实用一种愚蠢的方法来解决这个问题

var _temp_index = 0;
App.TestController = Ember.ObjectController.extend({
    myIndex: null,
    init: function(){
        this._super();
        this.set('myIndex', _temp_index);
        _temp_index++;
    }
})

期待更好的解决方案!!!

4 个答案:

答案 0 :(得分:1)

您可以使用每个上的itemViewClass保持对其contentIndex的引用这一事实。你可以在把手上做这样的事情:

<ul>
  {{#each item in model itemController="test" itemViewClass="App.ItemView"}}
     <li>{{item.content}} {{controller.index}}</li>
  {{/each}}
</ul>

然后只需创建一个设置控制器索引属性的itemView:

App.ItemView = Ember.View.extend({
  didInsertElement: function() {
    this.get('controller').set('index',this.get('contentIndex'));
  }
});

这是一个工作的小提琴。

http://emberjs.jsbin.com/EcUCiqO/2/edit

答案 1 :(得分:1)

以下是一种无需itemViewClass即可完成此操作的方法。

itemController

export default Em.ObjectController.extend({ // I'm using ES6 syntax but you don't have to

  index: function() {
    var arrangedContent = this.get('target.content');
    var item = this.get('content');

    return arrangedContent.indexOf(item) + 1;
  }.property('target.content.@each.score'), // Change score to whatever property things are sorted by in the parent controller

});

在你的模板中:

{{#each arrangedContent}}
  Index: {{index}}
{{/each}}

答案 2 :(得分:0)

使用needs属性获取ArrayController

this.get('model')获取currentModel

使用indexOf()获取索引

答案 3 :(得分:0)

你可以不用移动逻辑来查看这种方式

  1. 为路径

    内的数组中的每个模型添加索引属性
    App.SomeParentRoute = Ember.Route.extend
    
        setupController: (controller, model) ->
            model = model.map (item, index) -> item.set 'index', index
    
            controller.set 'model', model
    
  2. 使用数组控制器存储将使用itemController

    的所有数据
    App.SomeParentController = Ember.ArrayController.extend
        itemController: 'someChild'
    
  3. 现在每个itemController index

    中都有someChild属性
    App.SomeChildController = Ember.ObjectController.extend
        init: -> console.log @get('index')