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
Javascript Ember pushObjects()未通知计算属性_Javascript_Ember.js - Fatal编程技术网

Javascript Ember pushObjects()未通知计算属性

Javascript Ember pushObjects()未通知计算属性,javascript,ember.js,Javascript,Ember.js,我试图使用余烬灯光表,但在更新对象数组时遇到了一些问题 当我使用actionupdateList()时,我可以看到两个数组都在更改(向列表中添加/删除对象),但是计算属性tableModel不会被触发 我原以为pushObjects()可以解决这个问题,但由于某种原因它没有发出通知(它正在添加)。我还尝试用Ember.A()初始化select_people,尽管[]应该已经是一个Ember数组了 我的混音: // table-testing import Ember from 'ember';

我试图使用
余烬灯光表
,但在更新对象数组时遇到了一些问题

当我使用action
updateList()
时,我可以看到两个数组都在更改(向列表中添加/删除对象),但是计算属性
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

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


你的代码在我看来非常完美。如果你能在twiddle中复制它,它将帮助我们了解正在发生的事情。只要确保在调用
updateList
函数之后,模板应该访问/需要
tableModel
。如果块可能为假或未呈现特定块意味着它将不会执行计算属性,则可以访问
tableModel
中的
property。它不应该是
pushObject
removeObject
,单数吗?@kumkanillam,我将尝试在旋转中重现。我不在其他任何地方使用tableModel。我使用在mixin中创建的对象表,它使用这个.get('tableModel')。。。也许这就是陷阱@锁,这些方法存在。您使用对象数组而不是一个对象,您可以在modelTable上的一次迭代中检查我放在模板上的API,但它没有帮助。。。我会看看我是否能在twiddleFeel上做点什么,用你的具体研究和你是如何解决的来更新我的答案……你就是那个解决问题的人