这种情况:
{{#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++;
}
})
期待更好的解决方案!!!
答案 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'));
}
});
这是一个工作的小提琴。
答案 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)
你可以不用移动逻辑来查看这种方式
为路径
内的数组中的每个模型添加索引属性App.SomeParentRoute = Ember.Route.extend
setupController: (controller, model) ->
model = model.map (item, index) -> item.set 'index', index
controller.set 'model', model
使用数组控制器存储将使用itemController
的所有数据App.SomeParentController = Ember.ArrayController.extend
itemController: 'someChild'
现在每个itemController index
someChild
属性
App.SomeChildController = Ember.ObjectController.extend
init: -> console.log @get('index')