Ember.js 组件之间的余烬通信
我正在开发一个Web应用程序来显示和搜索文档。我将主包装器div如下所示: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') 外包装也是一个余烬组件。所
<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); }
}
几周前,我评估了几种父子组件通信方法:,也许这会有所帮助。不,假设它们在您的实现中也紧密耦合,也许其中一个应该使用另一个,而不是兄弟。或者,其中一个组件的结果应该作为依赖组件的属性绑定。我看了一下您的文章。这是一本有趣的书!谢谢你的解决方案!