Ember pushObjects() 未通知计算 属性

Ember pushObjects() not notifying computed property

我正在尝试使用 ember-light-table,但在更新我的对象数组时遇到了一些问题。

当我使用操作 updateList() 时,我可以看到两个数组都发生了变化(adding/removing 个对象到列表中),但是未触发计算的 属性 tableModel

我认为 pushObjects() 可以解决问题,但由于某种原因它没有通知(它正在添加)。我还尝试用 Ember.A() 初始化 select_people,尽管 [] 应该已经是一个 ember 数组...

我的混入:

// table-testing
import Ember from 'ember';
import Table from 'ember-light-table';

export default Ember.Mixin.create({
  table: null,
  tableColumns: null,
  tableModel: null,
  init() {
    this._super(...arguments);
    let table = new Table(this.get('tableColumns'), this.get('tableModel'), { enableSync: this.get('enableSync') });
    this.set('table', table);
  }
});

我的控制器

import Ember from 'ember';
import TableTesting from '../mixins/table-testing';
const { computed } = Ember;

export default Ember.Controller.extend(TableTesting, {
  tableColumns: computed(function() {
    return [{
      label: 'First Name',
      valuePath: 'firstName',
      width: '50%',
      sortable: false,
    }, {
      label: 'Last Name'
      valuePath: 'lastName',
      width: '50%'
    }]
  }),
  tableModel: computed('selected_people.@each.firstName', function() {
    // THIS MESSAGE ONLY SHOW WHEN VIEW IS RENDERED
    // I've tried .[], .@each, .length... none of them worked and I believe @each.firstName would be the most appropriated from what I've read
    console.log('computed method not showing',this.get('selected_people'));
    return this.get('selected_people');
  }),
  init() {
    this._super(...arguments);
    this.set('selected_people',[]);
  },
  actions: {
    updateList(item, moveToList) {
      let removeFromList, fromList, toList;
      if (moveToList === 'people') {
        removeFromList = 'selected_people'
      } else if (moveToList === "selected_people") {
        removeFromList = 'people';
      }
      // get the object lists
      fromList = this.get(removeFromList);
      toList = this.get(moveToList);
      // update list ---> HERE I UPDATE USING KOVL METHOD
      toList.pushObjects(item);
      fromList.removeObjects(item);
      console.log('update!',this.get('selected_people'));
    }
}

只要确保 tableModel 应该是模板或代码中的 accessed/required。

Computed 属性 是惰性的,因此当您在代码或模板中请求它时,它会被计算。否则,它不会被调用。 第一次调用时,结果会是 return 并且会被缓存。后续访问将从缓存中获取它。更改任何依赖属性都会导致缓存失效,以便计算函数在下一次访问时再次运行。

大部分复制自 guides.emberjs