首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VSCode API TreeView不获取元素的子元素

VSCode API TreeView不获取元素的子元素
EN

Stack Overflow用户
提问于 2022-04-27 16:51:23
回答 2查看 270关注 0票数 0

在向VSCode提供treeview时,它似乎得到了所有的父元素,但是没有得到这些父元素的子元素,我在其中添加了一个调试点,并且看到它只在undefined中被调用,我的实现是否有什么不适当的地方?

代码语言:javascript
复制
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
            )
        )
      );
    }
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-02 22:08:50

我在这里找到了真正感兴趣的通道:TreeView指南:树数据提供程序,这对于任何构建TeeViews的人来说都是一个很好的资源。

collapsibleState保留为其默认 of TreeItemCollapsibleState.None表示树项没有子项。对于具有collapsibleState of TreeItemCollapsibleState.None的树项,将不调用TreeItemCollapsibleState.None

强调补充说,默认的是TreeItemCollapsibleState.None,所以如果不显式地将状态设置为其他东西,那么这些节点的子节点将永远不会被检索。

正如我在注释中提到的,您为父节点提供了一个vscode.TreeItemCollapsibleState.None属性。显然,vscode很聪明,无需费心地寻找这些节点的子节点--因为它们无论如何都不能打开。

解决方案就是选择另一个collapsibleState,如TreeItemCollapsibleState.CollapsedTreeItemCollapsibleState.Expanded

票数 1
EN

Stack Overflow用户

发布于 2022-04-29 17:26:36

“如果我看得对,您正在创建作为父节点的GalleryTreeItems,但是它们有vscode.TreeItemCollapsibleState.None,这意味着它们的行为就像叶节点。”

将其更改为vscode.TreeItemCollapsibleState.Collapsed修复了它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72032586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档