Polymer 父元素在其子元素“聚合物1.0”之前已准备就绪

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">

已修改此问题以匹配实际问题。

原始问题错误地集中在iron ajax上,请参见下面的原始问题。问题应该是:

请说明为什么子iron ajax元素在我的组件的“就绪”回调期间未就绪,该组件定义如下:

<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}];
});