VS 代码扩展开发:可以注销事件处理程序
VS Code Extension Development: possible to unregister an event handler
在我的扩展中,我想在用户发出命令时注册一个事件侦听器,但在用户发出另一个命令时取消注册侦听器(或将侦听器更新为其他内容)。
例如,在命令 A 的末尾,我将 window.onDidChangeActiveTextEditor
注册为某物(在我的例子中,我将其注册到命令 A 处理程序)。在命令 B 的末尾,我想注销此注册。我了解 window.onDidChangeActiveTextEditor
将 return 一次性用品,但我不知道如何将此一次性用品传递给命令 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 的提示解决了它。将代码重构为您需要的结构,如 class.
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;
}
在我的扩展中,我想在用户发出命令时注册一个事件侦听器,但在用户发出另一个命令时取消注册侦听器(或将侦听器更新为其他内容)。
例如,在命令 A 的末尾,我将 window.onDidChangeActiveTextEditor
注册为某物(在我的例子中,我将其注册到命令 A 处理程序)。在命令 B 的末尾,我想注销此注册。我了解 window.onDidChangeActiveTextEditor
将 return 一次性用品,但我不知道如何将此一次性用品传递给命令 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 的提示解决了它。将代码重构为您需要的结构,如 class.
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;
}