首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >添加新项时vsCode刷新树

添加新项时vsCode刷新树
EN

Stack Overflow用户
提问于 2020-03-25 13:35:23
回答 1查看 1.5K关注 0票数 4

我使用以下代码显示树项,

https://github.com/microsoft/vscode-extension-samples/tree/master/tree-view-sample

树中显示的项与文件相关,如果文件更改了树项的数量,则应该相应地更改树项的数量(使用工作正常的createFileSystemWatcher ),目前我已经添加了文件监视程序的代码,当它停止时(当我更改文件时,在getChildren函数上),我看到我已经提供了新更新的条目(在代码中),但是树没有用新数据刷新,您知道我在这里遗漏了什么吗?不知何故,新更新的数据没有反映在树中。当我刚开始这个话题的时候,也许我错过了什么。如果代码是好的,有一个错误,或这是不支持的,请让我知道。

代码语言:javascript
运行
复制
export class TaskTreeDataProvider implements vscode.TreeDataProvider<TreeItem> {

private _onDidChangeTreeData: vscode.EventEmitter<TreeItem | null> = new vscode.EventEmitter<TreeItem | null>();
  readonly onDidChangeTreeData: vscode.Event<TreeItem | null> = this
    ._onDidChangeTreeData.event;

  private eeake: Promise<TreeItem[]> | undefined = undefined;
  private autoRefresh: boolean = true;

  constructor(private context: vscode.ExtensionContext) {
    this.autoRefresh = vscode.workspace
      .getConfiguration(“sView")
      .get("autorefresh");

    let filePath = this.fileName;
    let fileWatcher = vscode.workspace.createFileSystemWatcher(filePath);
    fileWatcher.onDidChange(() => (this.eeake = this.getChildren()), this.refresh());
  }

  refresh(): void {
    this._onDidChangeTreeData.fire();
  }

  public async getChildren(task?: TreeItem): Promise<TreeItem[]> {
    let tasks = await vscode.tasks
      .fetchTasks({ type: “run” })
      .then(function (value) {
        return value;
      });

    let entry: TreeItem[] = [];
    if (tasks.length !== 0) {
      for (var i = 0; i < tasks.length; i++) {
        entry[i] = new TreeItem(
          tasks[i].definition.type,
          tasks[i].name,
          {
            command: “sView.executeTask",
            title: "Execute",
            arguments: [tasks[i]]
          }
        );
      }
    }
    return entry;
  }

  getTreeItem(task: TreeItem): vscode.TreeItem {
    return task;
  }
}



class TreeItem extends vscode.TreeItem {
  type: string;
  constructor(
    type: string,
    label: string,
    collapsibleState: vscode.TreeItemCollapsibleState,
    command?: vscode.Command
  ) {
    super(label, collapsibleState);
    this.type = type;
    this.command = command;
    this.iconPath = getIcon();
  }

}

如果有什么遗漏,请告诉我,我补充说,我真的被它困住了。

如果有其他方法刷新树,请告诉我。

EN

Stack Overflow用户

回答已采纳

发布于 2020-03-31 08:59:58

构造函数的最后一行在我看来是可疑的。

代码语言:javascript
运行
复制
fileWatcher.onDidChange(() => (this.eeake = this.getChildren()), this.refresh());

我相信你的意思是:

代码语言:javascript
运行
复制
fileWatcher.onDidChange(() => {
  this.eeake = this.getChildren();
  this.refresh();
});

您的原始代码实际上立即在构造函数中调用this.refresh(),并将返回值作为第二个arg传递给fileWatcher.onDidChange()this.refresh()不是作为第一arg传递给onDidChange()的侦听器的一部分。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60849968

复制
相关文章

相似问题

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