【问题标题】:Lateral communication in Polymer聚合物中的横向通信
【发布时间】:2020-10-23 20:53:33
【问题描述】:

问题来了:

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

实现这一点的旧方法是让事件冒泡到根节点,然后在根节点上触发 broadcast 事件以供其他元素收听。

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

这种方法可以用 Polymer 实现吗?否则可以用不同的方法解决吗?

【问题讨论】:

  • 链接到 Polymer issue
  • Polymer 希望您避免横向通信,并让所有通信由控制器进行调解。 IOW,有一个明确的容器,它知道两个目标并管理它们的通信。作为一种架构,起初它可能感觉像是额外的工作,但最终会提供更强大的设计。
  • @ScottMiles 这就是我的意思,如果措辞具有误导性,请见谅。看起来你可以在 Polymer 中使用元素作为服务,这甚至比控制器更好。

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


【解决方案1】:

你应该可以使用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>

【讨论】:

  • 聚合物信号已重命名为核心信号
  • 不,它已被重命名为 Iron-signals
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多