在向VSCode提供treeview时,它似乎得到了所有的父元素,但是没有得到这些父元素的子元素,我在其中添加了一个调试点,并且看到它只在undefined中被调用,我的实现是否有什么不适当的地方?
export class GalleryTreeItem extends vscode.TreeItem {
constructor(
private extensionUri: vscode.Uri,
public collapsibleState: vscode.TreeItemCollapsibleState,
public readonly name: string,
public readonly project?: Project
) {
super(name, collapsibleState);
if (this.project) {
this.contextValue = "gallery";
this.description = `v${this.project.config.userContentVersion}`;
this.tooltip = this.project.config.repositoryUrl;
this.command = {
title: "Plywood Gallery: Open a gallery webview.",
command: "plywood-gallery.Open",
arguments: [this.label],
};
this.iconPath = vscode.Uri.joinPath(
this.extensionUri,
"assets/photo-gallery.png"
);
} else {
this.contextValue = "chapter";
}
}
getChapters() {
if (this.project) {
return Object.keys(this.project.parameters).map(
(name) =>
new GalleryTreeItem(
this.extensionUri,
vscode.TreeItemCollapsibleState.Collapsed,
name
)
);
} else {
return [];
}
}
}
export class InstalledGalleriesExplorerProvider
implements vscode.TreeDataProvider<GalleryTreeItem>
{
constructor(private extensionUri: vscode.Uri) {}
private _onDidChangeTreeData: vscode.EventEmitter<
GalleryTreeItem | undefined | void
> = new vscode.EventEmitter<GalleryTreeItem | undefined | void>();
readonly onDidChangeTreeData: vscode.Event<
GalleryTreeItem | undefined | void
> = this._onDidChangeTreeData.event;
getTreeItem(element: GalleryTreeItem): vscode.TreeItem {
return element;
}
refresh(): void {
this._onDidChangeTreeData.fire();
}
async getChildren(element?: GalleryTreeItem): Promise<GalleryTreeItem[]> {
if (element) {
return Promise.resolve(element.getChapters());
} else {
return getLocalProjects(this.extensionUri).then((projects) =>
projects.map(
(prj) =>
new GalleryTreeItem(
this.extensionUri,
vscode.TreeItemCollapsibleState.None,
prj.config.projectName,
prj
)
)
);
}
}
}发布于 2022-05-02 22:08:50
我在这里找到了真正感兴趣的通道:TreeView指南:树数据提供程序,这对于任何构建TeeViews的人来说都是一个很好的资源。
将
collapsibleState保留为其默认 ofTreeItemCollapsibleState.None表示树项没有子项。对于具有collapsibleStateofTreeItemCollapsibleState.None的树项,将不调用TreeItemCollapsibleState.None。
强调补充说,默认的是TreeItemCollapsibleState.None,所以如果不显式地将状态设置为其他东西,那么这些节点的子节点将永远不会被检索。
正如我在注释中提到的,您为父节点提供了一个vscode.TreeItemCollapsibleState.None属性。显然,vscode很聪明,无需费心地寻找这些节点的子节点--因为它们无论如何都不能打开。
解决方案就是选择另一个collapsibleState,如TreeItemCollapsibleState.Collapsed或TreeItemCollapsibleState.Expanded。
发布于 2022-04-29 17:26:36
“如果我看得对,您正在创建作为父节点的GalleryTreeItems,但是它们有vscode.TreeItemCollapsibleState.None,这意味着它们的行为就像叶节点。”
将其更改为vscode.TreeItemCollapsibleState.Collapsed修复了它。
https://stackoverflow.com/questions/72032586
复制相似问题