我无法理解在嵌套对象模型中调用子项属性的正确方法,并使用它们来计算新属性。这是我到目前为止所做的:
Monitor.ProcessController = Ember.ObjectController.extend({
nbUsers: function() {
var total = 0;
this.get('containers').then(function(containers) {
containers.forEach(function(container, index){
total += container.get('nbUsers');
});
});
return total;
}.property('containers.@each.nbUsers')
});
Monitor.ContainerController = Ember.ObjectController.extend();
Monitor.Process = DS.Model.extend({
containers: DS.hasMany('container', {async : true}),
name: DS.attr('string')
});
Monitor.Container = DS.Model.extend({
process: DS.belongsTo('process'),
name: DS.attr('string'),
nbUsers: DS.attr('integer')
});
// Test data
Monitor.Process.FIXTURES = [
{
id: 1,
name: 'Mumble',
containers: [1,2]
},
{
id: 2,
name: 'EVE',
containers: [3]
}
];
Monitor.Container.FIXTURES = [
{
id: 1,
name: 'First',
process: 1,
nbUsers: 1
},
{
id: 2,
name: 'Second',
process: 1,
nbUsers: 1
},
{
id: 3,
name: 'Unique',
process: 2,
nbUsers: 1
}
];
因此,Process有多个子容器,我想基于容器数据动态地计算每个进程的总用户数。听起来微不足道,显然不是。
{{nbUsers}}一直返回“0”。 关于我做错了什么的指示?
答案 0 :(得分:0)
您的属性是异步的,因此您在更新总数之前返回0,并且由于它不是传回的引用,因此它不会更新值#&# 39;已经被退回了。因此,属性总数会更新,但不会更新返回到计算属性的值。
更改它的最简单方法是使其成为观察者,并让它更新属性。
Monitor.ProcessController = Ember.ObjectController.extend({
nbUsers: 0,
nbUsersWatcher: function() {
var self = this;
this.get('containers').then(function(containers) {
var total = 0;
containers.forEach(function(container, index){
total += container.get('nbUsers');
});
self.set('nbUsers', total);
});
}.observes('containers.@each.nbUsers')
});
您也可以使用计算机,但在我告诉您可能之前,我必须先测试一下。