Ember.js 如何定义作用于Ember.ArrayController的itemController的Ember.computed辅助程序?
我最近爱上了余烬。电脑助手。特别是像这样的 当与这样的ArrayController的Ember.js 如何定义作用于Ember.ArrayController的itemController的Ember.computed辅助程序?,ember.js,Ember.js,我最近爱上了余烬。电脑助手。特别是像这样的 当与这样的ArrayController的内容一起使用时,它们工作得非常好 App.People = Ember.ArrayController.extend({ //"content" is an array of App.Person objects. chosen: Ember.computed.filterBy('content', 'isChosen', true) }) App.PeopleController = Ember.A
内容一起使用时,它们工作得非常好
App.People = Ember.ArrayController.extend({
//"content" is an array of App.Person objects.
chosen: Ember.computed.filterBy('content', 'isChosen', true)
})
App.PeopleController = Ember.ArrayController.extend({
itemController: 'person',
chosen: function() {
return this.filterBy('isChosen', true)
}.property('@each.isChosen')
});
App.PersonController = Ember.ObjectController.extend({
isChosen: false
});
因此,假设isChosen
属性不属于person
模型
然后我可以定义itemController
,并创建一个这样的计算属性
App.People = Ember.ArrayController.extend({
//"content" is an array of App.Person objects.
chosen: Ember.computed.filterBy('content', 'isChosen', true)
})
App.PeopleController = Ember.ArrayController.extend({
itemController: 'person',
chosen: function() {
return this.filterBy('isChosen', true)
}.property('@each.isChosen')
});
App.PersonController = Ember.ObjectController.extend({
isChosen: false
});
这样一来,selected
computed属性将返回一个基于personController.isChosen
属性的数组
但这并不高效,因为它在每次子项更改时都会运行整个filterBy函数。其中,Em.computed.filterBy
helper根据需要添加和删除单个对象
有人知道如何定义作用于Ember.ArrayController的itemController的Ember.computed helper吗?您可以使用@this
作为dependentKey
绑定到itemController数组
App.PeopleController = Ember.ArrayController.extend({
itemController: 'person',
chosen: Ember.computed.filterBy('@this', 'isChosen', true)
});
App.PersonController = Ember.ObjectController.extend({
isChosen: false
});
很酷。感谢David Hamilton在sf ember上的演示。您确定每次isChosen更改项目时都会触发selected吗?是的,在这个jsbin中有一个类似的示例,应该可以使用em.computed helper重写“selected”属性。是的,它肯定会每次触发,computed属性表示每次更改依赖项时都重新计算。