聚合物查询选择器无法在聚合物元素中找到自定义聚合物元素
2014-12-15
691
我正在尝试通过 querySelector 或等效方法获取在另一个元素中定义的自定义 Polymer 元素。我的代码如下:
<polymer-element name="component-elem">
<!-- custom elem here -->
<ajax-service id="testComp"></ajax-service>
<template>
</template>
<script>
Polymer({
ready: function(){
var x = this.shadowRoot.querySelector('#testComp');
console.log(x); //always prints null
}
});
</script>
</polymer-element>
我已经看到许多堆栈溢出 帖子 与我想完成的类似,但没有任何好的结果,我也尝试过:
this.$.testComp
和
this.shadowRoot.querySelectorAll('#testComp')
它确实返回了一个对象,但我不清楚如何使用结果。
我的最终目标是添加一个自定义事件监听器,监听从
<ajax-service>
元素触发的事件。
我希望通过使用模板将来自 Ajax-service 元素的结果处理成重复元素repeat={{response}}。我不希望 Ajax-service 元素重复,因此 Ajax-service 位于模板之外。
有人能给出任何建议吗?
1个回答
<polymer-element name="component-elem">
<!-- custom elem here -->
<template>
<ajax-service id="testComp"></ajax-service>
<template repeat="{{response}}">
// html for looped items
<template if="{{response.data}}">
// do something with response.data
</template>
</template>
</template>
<script>
Polymer({
ready: function(){
var x = this.shadowRoot.querySelector('#testComp');
console.log(x); //always prints null
}
});
</script>
</polymer-element>
问题是由于您的元素模板中没有 ajax 元素。自定义元素中的第一个模板是 shadowdom 开始的地方。因此,对于要使用这些选择器选择的任何项目,它必须位于元素中的第一个模板中。稍后在元素原始模板中使用重复模板。
请记住,模板可以像上面的示例一样嵌套。
jimi dough10
2014-12-15