微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VS Code 扩展开发:可以取消注册事件处理程序

如何解决VS Code 扩展开发:可以取消注册事件处理程序

在我的扩展中,我想在用户发出命令时注册一个事件侦听器,但在用户发出另一个命令时取消注册侦听器(或将侦听器更新为其他内容)。

例如,在命令 A 的末尾,我将 window.onDidChangeActiveTextEditor 注册为某物(在我的情况下,我将其注册到命令 A 处理程序)。在命令 B 的末尾,我想取消注册注册。我知道 window.onDidChangeActiveTextEditor 会返回 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;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。