gpt4 book ai didi

dart - 删除和重新添加 polymer 元素实例的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 03:28:20 24 4
gpt4 key购买 nike

删除和重新添加 polymer 元素实例会破坏数据绑定(bind)。调用 prepareElement() 重新连接一切,但这是最好的方法吗?

给定这个 HTML,使用 click-counter example

<body>           
<click-counter id="click_counter_id" count="5"></click-counter>
</body>

和代码

main() {
Logger.root.level = Level.ALL;
Logger.root.onRecord.listen((LogRecord rec) {
print('${rec.loggerName}: ${rec.level.name}: ${rec.time}: ${rec.message}');
});

initPolymer().run(() {

Polymer.onReady.then((_) {

var elem = querySelector('#click_counter_id');
var parent = elem.parent;

elem.remove();

new Timer(new Duration(seconds:1), () {

parent.children.add(elem);

// This reconnects the bindings. Is it correct?
(elem as PolymerElement).prepareElement();
});
});
});
}

一切似乎都很好。但随后我们会收到一条警告:

polymer.events: FINE: event: [button].on-click => [click-counter].increment())
polymer.unbind: FINE: [click-counter] cancelUnbindAll
polymer.unbind: WARNING: [click-counter] already unbound, cannot cancel unbindAll
polymer.events: FINE: event: [button].on-click => [click-counter].increment())

有没有更好的方法来删除和重新添加 polymer 元素实例?

最佳答案

我自己没有尝试过,但它似乎是合理的。
我希望作者不介意回答 Detached observables when re-using element.
在查看了 polymer.js 信息位后,我发现有一个 cancelUnbindAll 函数,必须在创建元素或将 preventDispose 属性设置为 true 时调用该函数。
对于任何可能需要这样做的人,在 Dart 实现中,您必须在 super 调用之后在 leftView 函数中调用 cancelUnbindAll,如下所示:

void detached() {
super.leftView();
this.cancelUnbindAll(preventCascade: true);
}
或者,您可以简单地覆盖自定义元素中的 preventDispose 属性:
bool get preventDispose => true;
编辑
还有一个 preventDisposehttps://github.com/Polymer/polymer/issues/312

关于dart - 删除和重新添加 polymer 元素实例的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22486165/

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