父元素在其子元素之前就已准备好 - Polymer 1.0

时间:2015-07-10 18:29:15

标签: polymer polymer-1.0

此问题已被修改以符合实际问题。

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

请在“准备好”期间告知为什么儿童铁 - 阿贾克斯元素尚未准备就绪。 my-component的回调定义如下:

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

原始问题

原标题:&#39; WebComponentsReady&#39;在准备好铁 - ajax之前开火 - 聚合物1.0

我需要为自定义组件的观察属性分配一些值,内部使用带有禁用auto的iron-ajax - 所以我需要在iron-ajax元素上调用.generateRequest。这应该在主机页面/组件准备就绪时发生,以便根据主机组件代码中的数据从服务器获取一些默认值。

selected是在这样观察的组件上的数组属性:

observers: [
    '_selectedChanged(selected.splices)' // _selectedChanged calls .generateRequest
]

观察员由以下人员触发:

window.addEventListener('WebComponentsReady', function() {
    document.querySelector('paper-select').selected = [{id : 11855},{id : 11856}];
});

问题是WebComponentsReady会在之前触发.generateRequest在iron-ajax上可用。所以我的组件被初始化,_selectedChanged被调用,但其中的iron-ajax缺少方法,实际上也缺少其他属性/方法。

我实施了一个&#34;延期&#34;在组件中使用setTimeout的解决方法,它就像魅力一样,但显然不是这样。如果观察者在页面加载后的一段时间被触发,例如,一切都有效。通过用户的输入。这表明逻辑有效,它只是错误的时机。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

真正的问题是在我的组件&#39; s&lt; template&gt;中进行了html导入。 错误&#39;事件顺序是有道理的,因为当主持人呼叫准备好的时候,甚至没有注册铁阿贾克斯。回调。

我已将输入移到了外面&lt; dom-module&gt;现在一切都按预期工作了。