我在Polymer.dart中使用自定义元素和自定义属性玩了一下,但我无法找到super.attached
行的内容。
<link rel="import" href="packages/polymer/polymer.html">
<polymer-element name="kp-volume">
<template>
<p>You turned the volume to {{volume}}.</p>
</template>
<script type="application/dart">
import 'package:polymer/polymer.dart';
import 'dart:html';
@CustomTag('kp-volume')
class KPVolume extends PolymerElement {
KPVolume.created() : super.created();
@published int volume = 0;
void attached() {
//where do I need this line for ?
super.attached();
volume = 5;
}
}
</script>
</polymer-element>
因此,如果我更改attached
函数中的音量,那么我就可以覆盖HTML代码,例如<kp-volume volume="11"></kp-volume>
。但是,使用super.attached
或不使用{{1}}似乎没有什么区别。这条线做了什么?
答案 0 :(得分:3)
attached
是超类PolymerElement
中的一个方法,它将元素实际附加到DOM。
如果覆盖子类中的方法,则禁用超类的attached
方法,因此永远不会附加该元素。
通过覆盖方法,您可以替换它的默认实现。
通过调用super.attached()
,您可以调用PolymerElement
中的默认实现,并重新使用默认实现。
您可以在super.attached()
行之前或之后添加自定义代码,以便在默认附加逻辑之前和/或之后执行自定义代码。
覆盖attached
而不是调用super.attached();
会破坏您的元素。也许你的示例元素太简单了。
其他生命周期方法(如ready
,domReady
不需要调用超级实现,因为默认实现是一个空函数。
(xxxChanged
生命周期方法是另一种方法,它们根本不存在于超类中。)