Polymer 父元素在其子元素“聚合物1.0”之前已准备就绪
已修改此问题以匹配实际问题。 原始问题错误地集中在iron ajax上,请参见下面的原始问题。问题应该是: 请说明为什么子iron ajax元素在我的组件的“就绪”回调期间未就绪,该组件定义如下:Polymer 父元素在其子元素“聚合物1.0”之前已准备就绪,polymer,polymer-1.0,Polymer,Polymer 1.0,已修改此问题以匹配实际问题。 原始问题错误地集中在iron ajax上,请参见下面的原始问题。问题应该是: 请说明为什么子iron ajax元素在我的组件的“就绪”回调期间未就绪,该组件定义如下: <dom-module id="my-component"> <template> <link rel="import" href="../../../bower_components/iron-ajax/iron-ajax.html">
<dom-module id="my-component">
<template>
<link rel="import" href="../../../bower_components/iron-ajax/iron-ajax.html">
<iron-ajax
id="selectionLoader"
url=""
method="GET"
handle-as="json"
debounce-duration="300"
last-response="{{ suggestedOptions }}"
last-error="{{ lastError }}"
verbose=true
>
</iron-ajax>
</template>
</dom-module>
<script>
(function () {
Polymer({
is : 'paper-select',
ready : function() {
console.log(this.$.selectionLoader.generateRequest); // undefined
}
})
})()
</script>
观察者由以下因素触发:
window.addEventListener('WebComponentsReady', function() {
document.querySelector('paper-select').selected = [{id : 11855},{id : 11856}];
});
问题是WebComponentsReady以前启动过。generateRequest在iron ajax上可用。因此,我的组件被初始化,_selectedChanged被调用,但它内部的iron ajax缺少该方法,实际上也缺少其他属性/方法
我在组件内部使用setTimeout实现了一个“延迟”解决方案,它的工作方式很有魅力,但显然不是这样。此外,如果在页面加载后一段时间(例如,通过用户的键入)触发了观察者,则一切都可以正常工作。这表明逻辑是正确的,只是时机不对
我缺少什么?真正的问题是将html导入到我的组件中。 事件的“错误”顺序是有道理的,因为iron ajax在其主机调用“就绪”回调时甚至没有注册
我已将导入项移到外部,现在一切正常。当聚合元素准备就绪时,您不能发送“generaterequest()”吗?完全不用担心观测者,“ready”在“WebComponentsReady”之前触发,iron ajax还没有它的属性。你可以扩展iron ajax,在它的“ready”中添加一个事件。然后,回到你的元素中,观察到。。。。onReady-ironajax()。。在那里生成请求。当前无法扩展自定义元素。我需要将它封装在一些定制的iron ajax中,其中包含原始的iron ajax,面临同样的问题。要执行您的建议,我必须进入iron ajax源代码并从中触发一个外部就绪事件。我原以为元素会在默认情况下启动“准备就绪”来托管,但事实并非如此。奇怪的是,docs()说“在对宿主元素调用ready回调之前,会对任何本地DOM子级调用ready回调”,但事实似乎并非如此。。。当您实例化内置的iron ajax时,是否可以在选项列表中传递回调函数,其中CB包含您需要指示iron ajax“就绪”的“fire事件”。然后执行。generateRequest()。。
window.addEventListener('WebComponentsReady', function() {
document.querySelector('paper-select').selected = [{id : 11855},{id : 11856}];
});