Javascript 聚合物中的横向通讯

Javascript 聚合物中的横向通讯,javascript,model-view-controller,polymer,dom-events,Javascript,Model View Controller,Polymer,Dom Events,问题是: 任何两种聚合物元件都可能需要通信。没有假设这些元素可能在DOM(或影子DOM)中的什么位置,这意味着一个事件不能简单地冒泡到另一个元素 实现这一点的好方法是让事件冒泡到根节点,然后在根节点上激发广播事件,以便其他元素收听 然而,这种方法破坏了封装,似乎不利于聚合物的整体设计。例如,AngularJS提供了一个事件广播器,它可以防止控制器不必要地保留对根节点的引用 这种方法可以用聚合物实现吗?否则,可以用不同的方法解决这个问题吗?您应该能够使用聚合物信号来解决这个问题 引用文件: 您的

问题是:

任何两种聚合物元件都可能需要通信。没有假设这些元素可能在DOM(或影子DOM)中的什么位置,这意味着一个事件不能简单地冒泡到另一个元素

实现这一点的好方法是让事件冒泡到根节点,然后在根节点上激发广播事件,以便其他元素收听

然而,这种方法破坏了封装,似乎不利于聚合物的整体设计。例如,AngularJS提供了一个事件广播器,它可以防止控制器不必要地保留对根节点的引用


这种方法可以用聚合物实现吗?否则,可以用不同的方法解决这个问题吗?

您应该能够使用
聚合物信号来解决这个问题

引用文件:

您的元件发射聚合信号并在其有效载荷中命名该信号:

此事件将冒泡到文档中,处理程序在其中构造新事件polymer signal foo并将其分派到的所有实例。应用程序的某些部分或其他聚合元素可以声明一个元素以捕获命名信号:



link to Polymer Polymer希望您避免进行横向沟通,所有沟通都由控制器进行调解。注意,有一个明确的容器,它知道两个目标并管理它们的通信。作为一种体系结构,一开始它感觉像是额外的工作,但最终提供了更为强大的设计。@ScottMiles这就是我的意思,如果措辞有误导性的话,对不起。。看起来您可以在Polymer中使用元素作为服务,这甚至比控制器更好。Polymer-signals已重命名为core signals,但尚未重命名为iron signals
this.fire('polymer-signal', {name: "foo", data: "Foo!"});
<polymer-signals on-polymer-signal-foo="{{fooSignal}}"></polymer-signals>