gpt4 book ai didi

javascript - 与 connectedCallback 相关的模板冲压时间

转载 作者:行者123 更新时间:2023-11-28 00:49:28 26 4
gpt4 key购买 nike

问题描述

connectedCallback() 之后查询嵌入在模板元素中的节点时,Polymer (2.x) 似乎存在计时问题已被调用。我希望第一次调用 this.shadowRoot.querySelectorAll('h1')在下面的示例中应该返回所有 <h1>模板中的节点。Mozilla Custom Element Doc状态:

connectedCallback()

Called when the element is inserted into a document, including into a shadow tree

据我了解,此时所有模板都应该已经被淘汰了。

从代码片段中可以看出,第一个查询返回一个空列表。但是,如果查询延迟,则返回节点。

这里有什么我遗漏的吗?

示例代码

<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8">

<base href="https://polygit.org/components/">
<script src="webcomponentsjs/webcomponents-lite.js"></script>

<link rel="import" href="polymer/polymer-element.html">
<link rel="import" href="polymer/lib/elements/dom-repeat.html">
</head>

<body>
<dom-module id="x-elem">
<template>
<template is="dom-repeat" items="[[testItems]]">
<h1>[[item]]</h1>
</template>
</template>
<script>
class XElem extends Polymer.Element {
static get is() { return 'x-elem' }
static get properties() {
return {
'testItems': {
type: Array,
value: function () {
return [1, 2, 3];
}
}
}
}

ready(){
super.ready();
}

connectedCallback() {
super.connectedCallback();
console.log("Number of nodes after connectedCallback: ", this.shadowRoot.querySelectorAll('h1').length);
var callback = () => {
console.log("Number of nodes after timeout: ", this.shadowRoot.querySelectorAll('h1').length);
}
setTimeout(callback, 100);
}
}

customElements.define(XElem.is, XElem);
</script>
</dom-module>

<x-elem></x-elem>
</body>

</html>

最佳答案

connectedCallback 并不表示元素已被渲染。你可以使用 Polymer.RenderStatus.afterNextRender为此:

connectedCallback() {
super.connectedCallback();
Polymer.RenderStatus.afterNextRender(this, () => {
console.log('Number of nodes after connectedCallback: ', this.shadowRoot.querySelectorAll('h1').length);
});
}

demo

关于javascript - 与 connectedCallback 相关的模板冲压时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48253293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com