聚合物中的横向交流

时间:2014-06-16 10:25:14

标签: javascript model-view-controller javascript-events polymer

问题在于:

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

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

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

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

1 个答案:

答案 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>