我有一个典型ArrayController
/ ObjectController
设置如下:
App.PlayersController = Ember.ArrayController.extend({
itemController: 'playerItem',
visibleCount: function(){
//How do I compute this property?
}.property(...),
});
App.PlayerItemController = Ember.ObjectController.extend({
needs: 'players',
visible: function(){
...
}).property('...')
})
Run Code Online (Sandbox Code Playgroud)
该visible
物业是在电脑上PlayerItemController
,但我希望有从可见玩家的全局计数visibleCount
的PlayersController
.我该如何实现这一目标?
这是我尝试过的:
visibleCount: function(){
return this.get('content').filter(function(p){
return p.get('visible')
}).length;
}.property('content.@each.visible'),
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为每次都p.get('visible')
返回undefined
并且属性返回0
.
您可以完全从阵列控制器实例本身触发它,因为这itemController
是定义的位置.每当您尝试迭代this
阵列控制器内部时,您将获得单独的项目控制器.
这一点与您在模板上下文中考虑时一样多.如果迭代控制器,则会得到项目控制器
{{#each item in controller}}
yay I have an item controller
{{/each}}
Run Code Online (Sandbox Code Playgroud)
而如果您只是迭代模型/内容,那么您只需获得该记录
{{#each item in model}}
boo, boring model
{{/each}}
App.PlayersController = Ember.ArrayController.extend({
itemController: 'playerItem',
visibleItems: Em.computed.filterBy('','visible', true),
// you don't need this below, you could just do, `visibleItems.length` in the template
visibleCount: Em.computed.alias('visibleItems.length'),
// showing off getting item controller
randomProp: function(){
this.forEach(function(ic){
console.log(ic.get('visible'));
});
}.property('@each.visible')
});
Run Code Online (Sandbox Code Playgroud)
示例:http://emberjs.jsbin.com/dalazawe/1/edit
如果你以它实现的方式来考虑它,那真的很酷.本质上,数组控制器会覆盖它如何将项目从控制器返回给您.当你尝试获取时objectAt(1)
,如果你已经定义了itemController
它,它将包装底层对象itemController
并返回它.或者,如果您尚未定义itemController
,则只返回该对象.大多数人只是坚持它只是在模板中实现的方式,但只是它的一半,它是数组控制器如何将对象返回给你.
示例:http://emberjs.jsbin.com/dalazawe/2/edit
归档时间: |
|
查看次数: |
1709 次 |
最近记录: |