Как получить доступ к узлу пользовательского элемента
у меня есть пользовательский элемент, который сам содержит пользовательский элемент.
<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
равно null
и я не смог найти никакой другой ссылки на элемент host.
как я могу сделать это в Dart?
2 ответов
к сожалению, порядок создания пользовательских элементов не гарантируется. Вижу полимерная.Дарт обсуждения и соответствующее обсуждение полимерные дискуссионные группы.
однако, как уже упоминалось, ваше конкретное использование нарушит инкапсуляцию и использование CustomEvents-это гораздо больше. И используя полимер это будет очень легким снабдить также.
<!-- 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');
}
}
обновление: полимер >=1.0.x
shady DOM
new PolymerDom(this).parentNode;
или
domHost
сокращенно
Polymer.dom(this).getOwnerRoot().host
полная тень DOM
(this.parentNode as ShadowRoot).host
@ChristopheHerreman и @MattB по-прежнему правы относительно инкапсуляции не должны быть нарушены.
но также полимерные элементы JS получают доступ к родительским элементам в своих элементах макета, потому что это все еще удобно в некоторых вариант развития событий.
теперь это работает и в PolymerDart.
полимерная.dart
(this.parentNode as ShadowRoot).host