在定制的聚合物元素中,我需要在哪里使用super.attached?

时间:2015-02-12 20:39:53

标签: dart dart-polymer

我在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}}似乎没有什么区别。这条线做了什么?

1 个答案:

答案 0 :(得分:3)

attached是超类PolymerElement中的一个方法,它将元素实际附加到DOM。

如果覆盖子类中的方法,则禁用超类的attached方法,因此永远不会附加该元素。

通过覆盖方法,您可以替换它的默认实现。

通过调用super.attached(),您可以调用PolymerElement中的默认实现,并重新使用默认实现。

您可以在super.attached()行之前或之后添加自定义代码,以便在默认附加逻辑之前和/或之后执行自定义代码。

覆盖attached而不是调用super.attached();会破坏您的元素。也许你的示例元素太简单了。

其他生命周期方法(如readydomReady不需要调用超级实现,因为默认实现是一个空函数。 (xxxChanged生命周期方法是另一种方法,它们根本不存在于超类中。)