visual-studio-code - VS 代码扩展开发:可以取消注册事件处理程序
问题描述
在我的扩展中,我想在用户发出命令时注册一个事件监听器,但在用户发出另一个命令时取消注册监听器(或将监听器更新为其他东西)。
例如,在命令 A 结束时,我注册window.onDidChangeActiveTextEditor
为某物(在我的情况下,我将其注册到命令 A 处理程序)。在命令 B 结束时,我想取消注册此注册。我知道window.onDidChangeActiveTextEditor
会返回一个 Disposable,但我不知道如何将这个 Disposable 传递给命令 B。
我的代码结构是这样的:
vscode.commands.registerCommand('A', () => {commandA()});
vscode.commands.registerCommand('B', () => {commandB()});
commandA() {
...
vscode.window.onDidChangeActiveTextEditor(() => {commandA();})
}
commandB() {
...
// How do I unregister the event listener?
}
解决方案
使用评论中@rioV8 的提示解决了它。将代码重构为您需要的结构,例如类。
let changeHandle = null;
vscode.commands.registerCommand('A', commandA);
vscode.commands.registerCommand('B', commandB);
commandA() {
if (!changeHandle)
changeHandle = vscode.window.onDidChangeActiveTextEditor(commandA);
}
commandB() {
changeHandle?.dispose();
changeHandle = null;
}
推荐阅读
- game-maker - GMS2 中的延迟时间
- reactjs - 如何在 react js 中使用 webpack 减少 main.js 和 main.css 和 vendor.js 分成小块?
- ssis - 一一加载SSIS多个文件
- c++ - 如何检查模板参数是否是 C++ 中的特定类型
- c# - NullReferenceException:对象引用未设置为统一 c# 中的对象实例
- python - 如何制作一个不和谐的机器人,以便它可以将通知从网站发送到某个频道 Python
- unit-testing - 如何向 CKEditor 自定义插件添加单元测试
- angular - 问题:在 [attr.aria-label] 中插入条件
- reactjs - Reactjs 中的 Crud 更新操作不起作用
- python - 从 google book api 获取缩略图到 python 变量