问题在于:
任何两个Polymer元素都可能需要通信。没有假设这些元素在DOM(或阴影DOM)中的位置,这意味着一个事件不能简单地冒泡到另一个元素。
实现这一目标的好方法是让事件冒泡到根节点,然后在根节点上激活广播事件,以便其他要监听的元素。
然而,这种方法打破了封装,似乎违背了Polymer的整体设计。例如,AngularJS提供了一个事件广播器,可以防止控制器不必要地保留对根节点的引用。聚合物可以实现这种方法吗?否则可以用不同的方法解决这个问题吗?
答案 0 :(得分:7)
您应该可以使用polymer-signals
http://www.polymer-project.org/articles/communication.html#using-ltpolymer-signalsgt
从文档引用:
你的元素触发聚合物信号,并在其有效载荷中命名信号:
this.fire('polymer-signal', {name: "foo", data: "Foo!"});
此事件冒泡到文档处理程序构造并将新事件Polymer-signal-foo分派给所有实例。应用程序的某些部分或其他Polymer元素可以声明一个元素来捕获命名信号:
<polymer-signals on-polymer-signal-foo="{{fooSignal}}"></polymer-signals>