2016-12-13 5 views
0

У меня есть parent template which is a dom-if и set to false at start. Он имеет child template which is a dom-repeat. Я хочу, чтобы bind a dom-change event to child template, однако, когда я пытаюсь сделать это в готовой функции it says cannot find addEventListener of undefined. как связать событие dom-change в этом случае.Привязка dom-change к вложенному дочернему шаблону, даже если родительский шаблон является dom-if false

this.$.level.addEventListener("dom-change", function (event) {  
    console.log(event); 
}); 

здесь является HTML для

<template is="dom-repeat" id="levels" items="{{parentNodes}}"> 
    <template is="dom-repeat" id="level" items="{{item.children}}"> //want to bind dom-change event to this however it is not there on dom ready 
     //some html here 
    </template> 
</template> 

ответ

0

Поскольку уровень в виде dom-repeat и а dom-if, this.$.level псевдоним не существует. Вы можете использовать this.$$('#level') ПОСЛЕ того, как он был вставлен на страницу (если это необходимо, и повторный запуск).

У вас возникнет проблема, когда вы можете столкнуться с несколькими уровнями «уровень», поэтому у вас должно быть id={{someFunc(index)}}" и эта функция, которая возвращает "level"+index или вместо них выбирает их через класс.

+0

Как мы проверяем «ПОСЛЕ того, как он был вставлен», нам нужно сохранить привязку событий, связанных с истинным ложным состоянием? Это правильный способ сделать это в полимере? – 1Mayur

+0

Возможно, у вас есть событие dom-change на вашем теге шаблона верхнего уровня, а затем добавьте и удалите прослушиватели событий, так как это изменится, но на самом деле лучший способ сделать это зависит от вашего кода. Я не могу комментировать действительно лучшие способы делать вещи, так как я не знаю вашего кода. Дело в том, что если вы попытаетесь найти этот идентификатор до его существования, он не будет работать. – elliot