Ember,观察者在另一个控制器中听一个属性

时间:2015-11-06 01:33:37

标签: ember.js ember-data

我有两个控制器标签和报告。 标签控制器需要在Reports上观察数据属性。 但是,在服务器上调用后,data属性是异步的并且已更新。 如何在报告中获取该属性?

我试图做以下事情:

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'));
  }
});

提前致谢!

1 个答案:

答案 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()之后被触发。所以它并没有真正观察我正在寻找的变化。谢谢大家的帮助。