如何以正确的方式在Polymer元素之间共享功能?

时间:2016-05-22 10:16:19

标签: polymer polymer-1.0 composition

Polymer behaviors很棒。但有时我需要跨多个元素共享一个函数/方法。我不需要带有行为的生命周期回调,声明的属性等。

我不太了解Polymer的架构,知道:

  1. 向自定义元素添加共享方法的最佳方式和地点(在生命周期回调中?)
  2. 何时扩展Polymer.Base更好?
  3. 示例1:

    假设我们要添加一个懒惰侦听方法,将事件侦听器附加到元素afterNextRender

    Polymer.RenderStatus.afterNextRender(this, function() {
        // add event listeners
    });
    

    正如Monica在Practical lessons from a year of building web components - Google I/O 2016中解释的那样,对于可能大量创建的元素,应避免使用Polymer listeners对象。

    示例2

    按照她的例子,现在我们只想在元素悬停/活动/聚焦时添加涟漪效果或控制行为,否则将其删除。许多元素都需要此功能。

    示例3,来自外部库的功能,例如lodash

1 个答案:

答案 0 :(得分:0)

暂时解释我自己的问题。

所有元素:Polymer.Base

Polymer使用Base的{​​{1}}方法扩展_addFeature原型,它是所有Polymer元素的原型(旁注:Base方法本身使用{{1内部的_addFeature方法。这是扩展Polymer Elements的最深层次。

特定元素类型:元素构造函数对象以及行为

行为在特定类型的所有元素之间共享。它们应用于元素注册时间。当然,构造函数对象中的方法也适用于元素类型的原型。

特定于元素实例:其他所有

从元素创建开始定义的其他方法特定于该元素实例。此外,如果您使用Baseextend中的所有属性和方法都将应用于创建的元素(使用Polymer.Base.create(tag, obj)关键字,即无访问者)。因此,obj可以在不同的元素实例之间共享,具体取决于上下文。

结论

聚合物创建者希望我们在不同元素类型之间共享方法(以及更多)的标准方法是使用行为。但是,如果您具有所有或大多数元素都使用的功能,则扩展in是一个不错的选择。