简单场景:有 2 个 Web 组件,父级中的子级。
当将父级重新插入到其他地方时,分离 已调用父级的回调,并在其中调用 children.clear() (也许这里是愚蠢的地方)。
在清理 child 的过程中,我可以看到不仅 child 的分离 cb 调用了,但是 附也:
https://dartpad.dartlang.org/26921310fb7f85dee672
import 'dart:html';
void main() {
document.registerElement("x-my", MyElement);
document.registerElement("x-ch", MyChild);
var container = new Element.tag("x-my");
document.body.children.add( container );
print("creation done");
// just re-add container to somewhere else
var anothercontainer = new Element.div();
document.body.children.add( anothercontainer );
anothercontainer.children.add(container);
}
class MyElement extends HtmlElement {
MyElement.created() : super.created();
@override
attached() {
print("attached enter ${this.outerHtml}");
super.attached();
children.add( new Element.tag("x-ch") );
print("attached leave ${this.outerHtml}");
}
@override
detached() {
print("detached enter ${this.outerHtml}");
children.clear();
super.detached();
print("detached leave ${this.outerHtml}");
}
}
class MyChild extends HtmlElement {
MyChild.created() : super.created() { this.innerHtml = "child created"; }
@override
attached() {
print("attached enter ${this.outerHtml}");
super.attached();
print("attached leave ${this.outerHtml}");
}
@override
detached() {
print("detached enter ${this.outerHtml}");
super.detached();
print("detached leave ${this.outerHtml}");
}
}
给出输出:
attached enter <x-my></x-my>
attached enter <x-ch>child created</x-ch>
attached leave <x-ch>child created</x-ch>
attached leave <x-my><x-ch>child created</x-ch></x-my>
creation done
detached enter <x-my><x-ch>child created</x-ch></x-my>
detached enter <x-ch>child created</x-ch>
detached leave <x-ch>child created</x-ch>
attached enter <x-ch>child created</x-ch> <---- my question
attached leave <x-ch>child created</x-ch>
detached enter <x-ch>child created</x-ch>
detached leave <x-ch>child created</x-ch> <---- ends here
detached leave <x-my></x-my>
attached enter <x-my></x-my>
attached enter <x-ch>child created</x-ch>
attached leave <x-ch>child created</x-ch>
attached leave <x-my><x-ch>child created</x-ch></x-my>
最佳答案
关于这个 AFAIR 有一个 Unresolved 问题。我认为这是由于从自定义元素的构造函数中修改 DOM 造成的。
尝试移动
this.innerHtml = "child created";
至
attached()
关于dart - 父级分离回调中的children.clear期间的附加回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35529196/