6

我有一个自定义元素,它本身承载一个自定义元素。

<polymer-element name="flex-nonvisual">
  <template>
    <polymer-flex-layout></polymer-flex-layout>
  </template>
</polymer-element>

现在在attached()(或其他一些回调)中,PolymerFlexLayout我想设置flex-nonvisual元素的类属性。

在 Javascript 中,代码看起来像this.parentNode.host.classList.add('someclass');

在 Dart 中attached()(在调用 之后super.attached()this.parent为空,我找不到对宿主元素的任何其他引用。

我怎样才能在 Dart 中做到这一点?

4

2 回答 2

7

不幸的是,不能保证自定义元素的创建顺序。请参阅Polymer.dart 讨论Polymer 讨论组的相关讨论。

但是,如前所述,您的特定用法将破坏封装,使用 CustomEvents 是更可行的方法。并且使用 Polymer 这也变得非常容易实现。

<!-- flex_nonvisual.html file -->

<polymer-element name="flex-nonvisual">
  <template>
    <polymer-flex-layout on-ready="{{layoutReady}}"></polymer-flex-layout>
  </template>
</polymer-element>
// polymer_flex_layout.dart file

@CustomTag('polymer-flex-layout')
class PolymerFlexLayout extends PolymerElement {
  // other stuff here
  void attached() {
    super.attached();
    dispatchEvent(new CustomEvent('ready'));
  }
}
// flex_nonvisual.dart

@CustomTag('flex-nonvisual')
class FlexNonvisual extends PolymerElement {
  // Other stuff here
  void layoutReady(Event e, var details, Node node) {
    this.classes.add('someclass');
  }
}
于 2013-11-14T14:50:10.700 回答
6

更新:聚合物 >=1.0.x

阴暗的 DOM

new PolymerDom(this).parentNode;

或者

domHost

短缺

Polymer.dom(this).getOwnerRoot().host   

全阴影 DOM

(this.parentNode as ShadowRoot).host

@ChristopheHerreman 和 @MattB 关于封装不应该被破坏仍然是正确的。

但是 JS Polymer 元素也可以在其布局元素中访问父级,因为在某些场景中它仍然很方便。

这现在也适用于 PolymerDart。

聚合物.dart <= 0.16.x

(this.parentNode as ShadowRoot).host
于 2014-03-04T10:07:32.580 回答