Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 添加新项时vsCode刷新树_Javascript_Node.js_Typescript_Vscode Extensions_Vscode Tasks - Fatal编程技术网

Javascript 添加新项时vsCode刷新树

Javascript 添加新项时vsCode刷新树,javascript,node.js,typescript,vscode-extensions,vscode-tasks,Javascript,Node.js,Typescript,Vscode Extensions,Vscode Tasks,我使用以下代码显示树项目 树中显示的项目与文件相关,如果文件更改,则树项目的数量应相应更改(使用createFileSystemWatcher,其工作正常),当前我已添加文件查看器的代码,调试时停止(当我更改文件时,在getChildren函数上)我看到我提供了新更新的条目(在代码中),但是树没有用新数据刷新,知道我这里缺少什么吗?不知何故,新更新的数据没有反映在树中。由于我不熟悉这个话题,我可能错过了一些东西。如果代码是正常的,有一个错误或这是不支持的,请让我知道 export class

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

树中显示的项目与文件相关,如果文件更改,则树项目的数量应相应更改(使用
createFileSystemWatcher
,其工作正常),当前我已添加文件查看器的代码,调试时停止(当我更改文件时,在
getChildren
函数上)我看到我提供了新更新的条目(在代码中),但是树没有用新数据刷新,知道我这里缺少什么吗?不知何故,新更新的数据没有反映在树中。由于我不熟悉这个话题,我可能错过了一些东西。如果代码是正常的,有一个错误或这是不支持的,请让我知道

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();
  }

}

导出类TaskTreeDataProvider实现vscode.TreeDataProvider{
private _onDidChangeTreeData:vscode.EventEmitter=新的vscode.EventEmitter();
只读onDidChangeTreeData:vscode.Event=this
._onDidChangeTreeData.event;
私有eeake:承诺|未定义=未定义;
私有自动刷新:布尔值=true;
构造函数(专用上下文:vscode.ExtensionContext){
this.autoRefresh=vscode.workspace
.getConfiguration(“sView”)
.get(“自动刷新”);
让filePath=this.fileName;
让fileWatcher=vscode.workspace.createFileSystemWatcher(filePath);
fileWatcher.onDidChange(()=>(this.eeake=this.getChildren()),this.refresh());
}
刷新():无效{
这是一场火灾;
}
公共异步getChildren(任务?:TreeItem):承诺{
让任务=等待vscode.tasks
.fetchTasks({type:“run”})
.然后(函数(值){
返回值;
});
let entry:TreeItem[]=[];
如果(tasks.length!==0){
对于(变量i=0;i
如果有什么遗漏,请让我知道,我补充说,我真的被它卡住了


如果有其他方法刷新树,请告诉我构造函数中的最后一行对我来说可疑

fileWatcher.onDidChange(() => (this.eeake = this.getChildren()), this.refresh());
我相信你的意思是:

fileWatcher.onDidChange(() => {
  this.eeake = this.getChildren();
  this.refresh();
});

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

我不确定我是否从问题中得到了正确答案,但您是说“我看到我提供了新的更新条目(在代码中)”-是否
条目
也在运行时包含新的更新项(如果您在那里设置了断点)?除此之外,一切看起来都很好。我正在对我的扩展进行类似的操作:@MoshFeu-谢谢,是的,完全正确!在运行时(通过调试),我看到所有内容都更新了,提供了新条目/删除了条目。但是,树没有反映这一点,我从一开始就看到条目,任何更改都不会反映在树中。如果您有任何提示,请告诉我。谢谢!我看不出原因。但是(尽管这不是StackOverflow策略的一部分)如果您的回购是公开的(在Github或其他网站上)我可以试着看一看,也许会有什么东西跳转。
fileWatcher.onDidChange(()=>(this.eeake=this.getChildren()),this.refresh();
这行对我来说很可疑。我相信你的意思是:
fileWatcher.onDidChange(()=>{this.eeake=this.getChildren();返回this.refresh())
@hackape-你能把它写下来作为答案吗?我会相应地修改我的代码,让你知道。非常感谢!我错过了这一部分…因为这是我的第一个typescript项目和vscode。如果你能对其余的代码提供反馈,那就太好了。谢谢!^对不起,我没有vscode扩展的经验。我只能帮助你注意这个错误,但是我不能对你的代码做太多评论。