2014-06-07 3 views
1

지난 몇 시간 동안 나는 내 Polymer 프로젝트 내의 형제 요소를 언급하는 데 어려움을 겪었습니다. 다트 (Dart)의 형제 (Sibling) 폴리머 요소를 참조하십시오.

/* main.html */ 
<link rel="import" href="siblingA.html"> 
<link rel="import" href="siblingB.html"> 

<polymer-element name="app-main"> 
    <template> 
     <app-siblingA></app-siblingA> 
     <app-siblingB></app-siblingB> 
    </template> 
    <script type="application/dart" src="main.dart"></script> 
</polymer-element> 

/* siblingA.html, nothing special about it */ 
<polymer-element name="app-siblingA"> 
    <template> 
     <button on-click="{{doSomething))">Do something</button> 
    </template> 
    <script type="application/dart" src="siblingA.dart"></script> 
</polymer-element> 

/* siblingA.dart */ 
import 'package:polymer/polymer.dart'; 
import 'dart:html'; 

@CustomTag('app-siblingA') 
class SiblingA extends PolymerElement { 
    bool get applyAuthorStyles => true; 

    SiblingA.created() : super.created() { 
    } 

    void doSomething(MouseEvent e, var detail, Node target) { 
    var profile = document.querySelector('app-siblingB'); 
    print(profile); // This is always null, why? 
    } 
} 

가 지금은 문서에서 내 app-main 노드를 얻을 수 있지만, 형제 요소를 얻기에 실패 다음 설치를 상상해보십시오. 성공하지 않고 shadowRoot을 통해 형제 요소를 가져 오려고했습니다.

형제 요소를 얻을 수있는 방법이 경우 app-siblingBdocument 또는 shadowRoot?

답변

2

형제는 <app-main>의 그림자 안에 있습니다. document.querySelector()은 요소의 그림자 DOM에 도달하지 않습니다.

(parentNode as ShadowRoot).querySelector('app-siblingB'); 
+0

이 솔루션은 여전히 ​​작동합니까 작동합니다? 나는 Exception "Breaking on exception : type 'DocumentFragment'가 'ShadowRoot'타입의 subtype이 아님을 알아 냈습니다." ShadowRoot에 캐스팅 할 때 – Wienczny

+1

코드가 작동하지 않는 이유를 발견했습니다. 요소가 아직 DOM에 연결되지 않았습니다. 'void attached()'가 호출되기 전에 parentNode는 DocumentFragment입니다. 나는'void ready()'에서 그것을 사용하고 있었다. – Wienczny