2014-12-05 4 views
0

내 폴리머 기반 웹 사이트에서 아약스를 통해 데이터를로드한다는 사용자 정의 요소를 만들었습니다. 데이터로드의 현재 상태에 따라 올바른 콘텐츠를 표시하기 위해 일부 <template if="{{}}"> 요소를 만들었습니다. 그것은 뭔가 이런 식으로 같습니다템플릿 내부에 노드 가져 오기

<polymer-element name="modules-item" attributes="moduleID categories"> 
    <template > 
    <service-get-module module="{{module}}" moduleID="{{moduleID}}"></service-get-module> 
    <paper-shadow z="1"> 
     <core-toolbar> 
      <span flex hero-id="title" hero itemprop="name">{{module.title}}</span> 
     </core-toolbar> 
    </paper-shadow> 
    <paper-progress id="moduleLoadingProgress"></paper-progress> 
    <template if="{{moduleID == null}}"> 
     <p>Modul not available</p> 
    </template> 
    <template if="{{moduleID != null && module == null}}"> 
     <p>Module is loading...</p> 
    </template> 
    <template if="{{moduleID != null && module != null}}"> 
     <div id="moduleContainer"> 
     <!-- Content //--> 
     </div> 
    <template> 
</template> 
<script> 
    Polymer({ 
    module: null, 
    moduleID: null, 
    ready: function(){ 
     console.log(this.$.moduleContainer); 
    } 
</script> 
</polymer-element> 

좋은 작품,하지만 난 그것을 얻을하지 않는 <div id="moduleContainer">에 액세스하려고하면 ... 난 그냥 이렇게 많은 게시물을 읽을 수는 있지만 모든 솔루션을하지 않았다. anybode 도움이 될까요? :)

여기 라이브 웹 사이트에 대한 링크입니다 : http://www.test.gruppenstunde.eu/

UPDATE 나는 그것이 hidden? -Attribute를 사용하는 것이 더 쉽습니다 것을 발견

폴리머 조금 더 작업 후 캐주얼 숨기기 콘텐츠. 예 :

<div hidden?="{{moduleID != null}}">Module not available</div> 

답변

1

당신은 $ 접근을 사용하여 (동적으로 생성) <template if="{{..}}"> 또는 <template repeat="{{..}}"> 내 요소에 액세스 할 수 있습니다. querySelector(...)을 사용해야하고 if식이 true로 평가 될 때만 필드를 사용할 수 있습니다 (요소가 실제로 생성/표시됨)

+0

감사합니다. 하지만'querySelector'를 사용하면 컨테이너도 얻지 못합니다. 이미'ready' 함수에서'module' 변수는 null이 될 것이라고 생각했습니다. 왜냐하면 그 모듈은 Ajax 진행 후에 내용을 얻었 기 때문에 'template'가 표시 될 때 컨테이너를 가져 오기 위해'moduleChanged' 함수를 만들었지 만 그것도 작동하지 않습니다 ... – Jokus

+0

표현식이 처음'true' 인 경우'domReady'를 시도 할 수 있습니다 . 'false'이면 요소가 없기 때문에 요소를 가져올 수 없습니다. 'moduleChanged'에서 [job] (https://www.polymer-project.org/docs/polymer/polymer.html#job)을 사용하여 Polymer가 먼저 뷰를 업데이트 할 수 있도록 지연을 추가 할 수 있습니다. –

+0

고마워요.하지만 제 작은 목적으로는 너무 어려울 것 같습니다. 그래서 나는 모든'if-templates'을 내 코드에서 지우고 다른 방법으로 사용합니다 :) – Jokus

0

해당 요소에 액세스하려면 해당 템플릿을 div에 넣고 div에 ID를 입력하면됩니다.

<div id="mod"> 
    <template if="{{moduleID != null && module != null}}"> 
    <div id="moduleContainer"> 
    <!-- Content //--> 
    </div> 
    <template> 
</div> 

당신은

var el = this.$.mod.querySelector("#moduleContainer"); 
+0

그게 작동하지 않습니다 .-( – Jokus

+0

여기 제가 여러분에게 줄 수있는 비슷한 것을 한 plunker입니다. 어떻게하면이 일을 얻을 수있는 아이디어. http://plnkr.co/edit/u6shXfgMlUP3UykvLQr7?p=preview 어쩌면 ID를 찾고 서식 파일 내에서 유일하게 div 인 지 찾아보십시오. –