dart - 在 Dart 中删除带有绑定(bind)事件的 DOM 元素

标签 dart dart-html

我在文档中找不到任何关于开发人员在从具有绑定(bind)事件的 DOM 中删除元素时应该做什么的内容。 jQuery 有 remove() 和 detach()。前者删除绑定(bind)事件,后者不删除。调用 Element#remove() 时,开发者应该怎么做?

最佳答案

监听器是元素对正在监听的任何内容的引用——这意味着该元素将保留正在监听的任何内容,直到该元素被 GC'd。

监听不会添加从监听器到元素的引用,因此可以在监听器之前对元素进行 GC。

考虑 GC 的方式是引用——当对象 A 引用对象 B 时,对象 A 保留对象 B。但是除非对象 B 有对对象 A 的引用,否则 B 不会阻止 A 被 GC'd。事件是从目标到监听器的引用,但不是相反。

此外,如果对象 A 具有对对象 B 的引用,而 B 具有对 A 的引用,那么它们都会相互保持,但如果没有任何东西对它们中的任何一个具有引用,那么它们都可以被 GC'd。

这一切的意思是,如果监听元素的代码预计有一个接近元素的生命周期,或者比元素长,那么它不需要取消监听。但是,如果预计元素是长生命周期的而听者是短生命周期的,那么听者应该是分离的(这是有道理的——为什么短生命周期的听者仍然在听某些东西?)。 (答案由 Google 工程师 Pete Blois 提供)。

关于dart - 在 Dart 中删除带有绑定(bind)事件的 DOM 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20133450/

相关文章:

dart - 我可以在未来的构建器上使用多种方法吗?

dart - 更改DART中svg行的长度

dart - 如何在 Dart 存储中获取所有对象

dart - SQLJocky 内置库 'dart:io' 在 Dartium 上不可用

javascript - Dart 问题 :js calls when compiled to JS

dart - flutter/Dart : Avoid storing password in plain text

flutter - Dart 中的 Lazy Singleton 与 Singleton

javascript - 如何将 Dart 转换为 JavaScript?

javascript - 在 MidiOutput 代理上调用 "send"时出现类型错误

firebase - 将数据从 Firebase 存储到 SQLite 或在 flutter 中离线存储的最佳方式是什么?