当过滤后的数组处于最高级别时,Ember的计算属性@each不会触发

时间:2014-10-29 09:31:39

标签: ember.js

我尝试根据过滤后的值设置计算属性。问题是@each只支持1级嵌套,并且不能在顶级工作。

来自官方指南:

  

请注意@each只能深入一级。您不能使用嵌套表单,如todos。@ each.owner.name或todos。@ each.owner。@ each.name。

所以这不是

computedProperty: function() {
    return this.get('context').filterProperty('selected', true);
}.property('@each.selected');

或者

computedProperty: function() {
    return this.get('context').filterProperty('selected', true)[0];
}.property('context.@each.selected')

不能工作(context更改后不会触发计算属性。)

contextEmber.ContainerView实例化中传递:

childViews: function() {
return [
  App.ReportNavigationFilterView.create({
    filterType:   'base',
    filterColor:  'orange',
    context:      this.get('controller.model.base')
    //context:      Ember.computed.alias('controller.model.base')
  }),
  App.ReportNavigationFilterView.create({
    filterType:   'sector',
    filterColor:  'green',
    context:      this.get('controller.model.sector')
  }),
  App.ReportNavigationFilterView.create({
    filterType:   'topic',
    filterColor:  'yellow',
    context:      this.get('controller.model.topic')
  }),
  App.ReportNavigationFilterView.create({
    filterType:   'answer',
    filterColor:  'red',
    context:      this.get('controller.model.answer')
  })
];
}.property()

有关如何在更改上下文时更新computedProperty的任何建议?

context = [ {selected: true}, {selected: false}, ...]

1 个答案:

答案 0 :(得分:0)

我结束了从Ember.ContainerView切换到Ember.CollectionView,其中有以下工作:

computedProperty: function() {
   return this.get('context').filterProperty('selected', true)[0];
}.property('content.@each.selected')