Polymer behaviors很棒。但有时我需要跨多个元素共享一个函数/方法。我不需要带有行为的生命周期回调,声明的属性等。
我不太了解Polymer的架构,知道:
Polymer.Base
更好? 示例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
答案 0 :(得分:0)
暂时解释我自己的问题。
Polymer.Base
Polymer使用Base
的{{1}}方法扩展_addFeature
原型,它是所有Polymer元素的原型(旁注:Base
方法本身使用{{1内部的_addFeature
方法。这是扩展Polymer Elements的最深层次。
行为在特定类型的所有元素之间共享。它们应用于元素注册时间。当然,构造函数对象中的方法也适用于元素类型的原型。
从元素创建开始定义的其他方法特定于该元素实例。此外,如果您使用Base
,extend
中的所有属性和方法都将应用于创建的元素(使用Polymer.Base.create(tag, obj)
关键字,即无访问者)。因此,obj
可以在不同的元素实例之间共享,具体取决于上下文。
聚合物创建者希望我们在不同元素类型之间共享方法(以及更多)的标准方法是使用行为。但是,如果您具有所有或大多数元素都使用的功能,则扩展in
是一个不错的选择。