Ответ 1
Верно, что хэш-код JavaScript может быть доступен с использованием либо точечной .
, либо массива []
. Если у вас есть буквальное имя, вы можете использовать точечную нотацию this.$.some_id
. Если у вас есть косвенность, например this.id = 'some_id'
, вы можете использовать нотацию массива this.$[this.id]
, чтобы найти то же самое значение.
Сложная часть состоит в том, что Polymer заполняет массив $
после первого штамповки шаблона, который происходит до ready
. Если у вас была внешняя привязка к this.id
, this.$.[this.id]
будет работать, но поскольку вы устанавливаете this.id
в ready
, это слишком поздно для удобства $
.
В этом случае вы можете напрямую обратиться к теневому роботу:
this.shadowRoot.querySelector('#' + this.id)
Pro tip: в какой-то момент подкласс может предоставить новый шаблон, и в этом случае this.shadowRoot
укажет на новый теневой корень, а не на версию суперкласса. По этой причине лучше всего установить именованный div, с которым вы можете запросить запрос, например. this.$.id_div.querySelector('#' + this.id')
.