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';
余烬灯光表
,但在更新对象数组时遇到了一些问题
当我使用actionupdateList()
时,我可以看到两个数组都在更改(向列表中添加/删除对象),但是计算属性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上做点什么,用你的具体研究和你是如何解决的来更新我的答案……你就是那个解决问题的人