Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 如何定义作用于Ember.ArrayController的itemController的Ember.computed辅助程序?_Ember.js - Fatal编程技术网

Ember.js 如何定义作用于Ember.ArrayController的itemController的Ember.computed辅助程序?

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

我最近爱上了余烬。电脑助手。特别是像这样的

当与这样的ArrayController的
内容一起使用时,它们工作得非常好

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属性表示每次更改依赖项时都重新计算。