在自定义聚合物元素中,我在哪里需要 super.attached?

Where do I need super.attached for in a custom polymer element?

我正在尝试使用 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 函数中更改音量,那么我就可以像这样 <kp-volume volume="11"></kp-volume> 覆盖 HTML 代码。但是使用 super.attached 似乎没有区别。这条线是做什么的?

attached 是 super class PolymerElement 中的一种方法,它将元素实际附加到 DOM.

如果您重写子class中的方法,超级class的attached方法将被禁用,因此永远不会附加该元素。

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

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

您可以在 super.attached() 行之前或之后添加您的自定义代码,这样您的自定义代码将在默认附加逻辑之后 and/or 之前执行。

覆盖 attached 而不调用 super.attached(); 会破坏您的元素。也许您的示例元素太简单了,无法引起注意。

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