javascript - 在 VS Code 中选择树项时执行命令
问题描述
我的 VS Code 扩展有一个树视图。当用户单击其中一个子树项时,它应该执行命令(显示信息消息)。我不知道如何捕捉点击事件并发出命令。这是树视图的提供者:
const vscode = require('vscode');
class TreeviewProvider {
constructor(data) {
this.data = data;
}
getTreeItem(element) {
return element;
}
getChildren(element) {
if(element) {
return Promise.resolve(this.getData(element.label));
}
else {
return Promise.resolve(this.getData());
}
}
getData(value) {
if(value) {
// Load children items
// Should I pass the command id?
const command = 'myExtension.debugMessage';
const data = this.data[value].map(element => {
return new Data(element.label, vscode.TreeItemCollapsibleState.None, command);
});
return data;
}
else {
// Load root items
// ...
}
}
}
class Data extends vscode.TreeItem {
constructor(label, collapsibleState, command = undefined) {
super(label, collapsibleState);
if(command) {
// It should be a command to execute
this.command = command;
}
}
}
module.exports = TreeviewProvider;
这就是我在激活函数中注册树视图的方式:
const vscode = require('vscode');
const TreeviewProvider = require('./components/TreeviewProvider');
/**
* @param {vscode.ExtensionContext} context
*/
function activate(context) {
const debugMessage = vscode.commands.registerCommand('myExtension.debugMessage', function () {
// This is a command to execute
const date = new Date();
vscode.window.showInformationMessage('Debug called at ' + date.toLocaleString());
});
const treeviewProvider = new TreeviewProvider(getSomeData());
const treeviewView = vscode.window.registerTreeDataProvider('treeview-view', treeviewProvider);
context.subscriptions.push(treeviewView);
}
// ...
解决方案
我刚刚意识到command
扩展 TreeItem 的类中的属性应该是一个Command
对象,就像文档中所说的那样:
https ://code.visualstudio.com/api/references/vscode-api#TreeItem
因此,可以通过以下方式完成:
class Data extends vscode.TreeItem {
constructor(label, collapsibleState, commandId) {
super(label, collapsibleState);
const command = {
'command': commandId // commandId is a string that contains the registered id ('myExtension.debugMessage')
};
this.command = command;
}
}
推荐阅读
- javafx - JavaFX拆分窗格分隔线位置不起作用
- r - 虽然循环在 R 中没有正确执行?
- python - 如何使用 PyCharm 中的函数清除输出时间
- google-earth-engine - 如何在谷歌地球引擎中按每个日期显示单个图像?
- c# - 如何将 try-catch-finally 块转换为 c# 中的 using 语句?
- flutter - 键盘在颤动中自动出现
- javascript - 当我单击表格中的任何单元格时,如何强制唯一的单元格保留而不消失?
- apache-spark - Hive 元存储中的上次访问时间更新
- python - 替换数据框Python中列中的所有数值
- amazon-s3 - S3 下载 - SDK 与 lambda 函数内的 HTTP 请求