2015-11-06 120 views
1

我有两个控制器标记和报告。 标签Controller需要观察Reports上的数据属性。 但是,数据属性是异步的并在服务器上调用后进行更新。 如何获取报告内的财产?Ember,观察者在另一个控制器中侦听属性

我试图做类似如下:

ReportsController({ 
    data: null, 
    actions: { 
    onAsyncCall: function(updatedData) { 
     this.set('data', updatedData); 
    } 
    } 
}); 

TagsController({ 
    reportsController: Ember.inject.controller('reports'), 
    doSomethingDataUpdate: Ember.observer('reportsController.data', function() { 
    this.set('tagProperties', this.get('reportsController.data')); 
    } 
}); 

提前感谢!

+2

0123ange切线,但我会做'tagProperties:Ember.computed.alias('reportsController.data')' – andorov

+0

在这种情况下不会'Ember.computed.readOnly'更好吗? – spectras

+0

为什么只读?他想要在另一个控制器实例上完全相同的事情。别名是一个不错的选择。 –

回答

1

所以我想出了一条出路。而不是让TagsController注入ReportsController。我将其逆转并将Tagscontroller注入到Reports中。

异步调用后,我更新的也就是现在观察到的Tagscontroller财产。问题解决了。

ReportsController({ 
    tagsController: Ember.inject.controller('reports.tags'), 
    actions: { 
    onAsyncCall: function(updatedData) { 
     this.set('tagsController.data', updatedData); 
    } 
    } 
}); 

TagsController({ 
    data: null, 
    doSomethingDataUpdate: Ember.observer('data', function() { 
    this.set('tagProperties', this.get('data')); 
    } 
}); 

更新: 所以我找到了一个更好的解决方案。 communicating between components

基本上我需要使用服务,特别是扩展Ember.Events的服务。

这样,每当我在我的报告,它会触发一个动作来更新我的标签异步更新。我认为我读了某个地方,观察者和计算只在this.get()后被解雇。所以它并没有真正观察到我正在寻找的变化。感谢大家的帮助。

+1

我不明白“tagProperties”的目的一个额外的观察员,什么都不做。顺便说一句,如果你有更多这些常见的功能。我建议制作一个“mixin”并用mixin封装控制器。 –

+0

对不起,您是对的。这只是伪代码。 “标签属性”是我想要设置的其他东西。 – imahungry