【发布时间】:2015-04-21 15:05:23
【问题描述】:
简而言之:
在 Polymer 中,我无法让 this.$[id] 查询动态生成的元素,而 this.shadowRoot.querySelector("#"+id) 可以毫无问题地完成这项工作。为什么?
详细介绍
我有什么:
- 已发布的数组
elements - 另一个数组
modifiedElements包含基于第一个数组的数据 -
repeat在第二个数组上生成的 HTML 块
我想要什么:
- 每当
elements更改时更新modifiedElements(✓) - 相应地更新 HTML (✓)
- 查询新块(对于某些交互)(不太✓)
我的聚合物元素:
<polymer-element name="my-sorted-elements" attributes="elements">
<template>
<template repeat="{{el in modifiedElements}}">
<div class="heading" on-click="{{toggle}}" target="collapse{{el.name}}">{{devices.name}}</div>
<core-collapse id="collapse{{el.name}}">
{{el.info}}
</core-collapse>
</template>
</template>
</polymer-element>
...及其脚本:
Polymer('my-element', {
ready: function() {
this.modifiedElements = [];
this.modifyElements();
},
elementsChanged: function() {
this.modifyElements();
},
modifyElements: function() {
for (var e in this.elements) {
el = this.elements[e];
// ... do stuff on el ...
this.modifiedElements.push(el);
}
},
toggle: function(event, detail, sender) {
// This works:
this.shadowRoot.querySelector("#"+sender.attributes['target'].value).toggle();
// This doesn't (not found):
this.$[sender.attributes['target'].value].toggle();
}
})
知道为什么第二种方法在toggle 中不起作用吗?我应该以某种方式更新this.$,还是有更好的方法来完成整个事情?
【问题讨论】:
标签: javascript data-binding polymer web-component shadow-dom