Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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
Ember.js 组件之间的余烬通信_Ember.js_Handlebars.js - Fatal编程技术网

Ember.js 组件之间的余烬通信

Ember.js 组件之间的余烬通信,ember.js,handlebars.js,Ember.js,Handlebars.js,我正在开发一个Web应用程序来显示和搜索文档。我将主包装器div如下所示: <div class="wrapper"> {{searchComponent searchComponent=searchComponent}} {{pdfViewer pdfSearchComponent=searchComponent}} </div> this.get('searchComponent').send('someAction') 外包装也是一个余烬组件。所

我正在开发一个Web应用程序来显示和搜索文档。我将主包装器div如下所示:

<div class="wrapper">
    {{searchComponent searchComponent=searchComponent}}
    {{pdfViewer pdfSearchComponent=searchComponent}}
</div>
this.get('searchComponent').send('someAction')
外包装也是一个余烬组件。所以它的控制器看起来像:

Ember.controller.extend({
   searchComponent: null,
   .
   .
   otherProperties,
   actions: { }
});
搜索组件会在初始化时绑定自身,这一点来源如下:

因此,我现在可以参考主pdfViewer中的组件,如下所示:

<div class="wrapper">
    {{searchComponent searchComponent=searchComponent}}
    {{pdfViewer pdfSearchComponent=searchComponent}}
</div>
this.get('searchComponent').send('someAction')
为了得到响应,现在我将另一个属性绑定到所有控制器/模板,然后在查看器控制器中观察该属性的更改,之后我可以将结果放置在需要的位置


是否有一种方法将消息从“PDFFEEVIEW”发送到我的“搜索组件”并接收“响应”而不将它们绑定在一起,如上所述?

< P>可以考虑通过<代码>服务< /代码>事件总线使用PUB/SUB,在其中,您的<代码>搜索组件< /代码>和<代码> PDFVIEWS/CODE >同时发出和监听消息,所以我们可以互相交谈。当然,存在对服务的依赖性,但从我所看到的情况来看,您的组件是非常特定于应用程序的

比如:

_listen: function() {
  this.get('eventBus').on('message', this, 'handleMessage');
}.on('init'),

actions: {
  click() { this.get('eventBus').trigger('message', message); }
}

几周前,我评估了几种父子组件通信方法:,也许这会有所帮助。

不,假设它们在您的实现中也紧密耦合,也许其中一个应该使用另一个,而不是兄弟。或者,其中一个组件的结果应该作为依赖组件的属性绑定。我看了一下您的文章。这是一本有趣的书!谢谢你的解决方案!