m4d*_*k3y 6 ftp typescript visual-studio-code vscode-extensions
我在此示例后编写一个Vscode FTP扩展名。
我的问题是,似乎provideTextDocumentContent每个文件仅被调用一次。再次打开文件不会调用该函数。相反,它仅显示已加载的内容。
请参考下面的代码:
public provideTextDocumentContent(uri: vscode.Uri, token: vscode.CancellationToken): vscode.ProviderResult<string> {
console.log('uri.path');
return this.model.getContent(uri).then(content => content);
}
Run Code Online (Sandbox Code Playgroud)
这些是我在视图上单击项目时的结果
log=> '/index.cfml' // Clicked on index.cfml
log=> '/login.cfml' // Clicked on login.cfml
log=> // Clicked on index.cfml
log=> // Clicked on login.cfml
log=> '/signup.cfml' // Clicked on signup.cfml
Run Code Online (Sandbox Code Playgroud)
预期结果将是:
log=> '/index.cfml' // Clicked on index.cfml
log=> '/login.cfml' // Clicked on login.cfml
log=> '/index.cfml' // Clicked on index.cfml
log=> '/login.cfml' // Clicked on login.cfml
log=> '/signup.cfml' // Clicked on signup.cfml
Run Code Online (Sandbox Code Playgroud)
如您所见provideTextDocumentContent,第一次单击某个项目被调用,但是第二次单击同一项目却没有被调用。知道为什么会发生这种情况,或者我如何才能强制vscode每次点击调用它?
编辑:
我目前onDidChange在我的数据提供者的顶部有一个事件,但实现可能是错误的。以下是我的数据提供者的外观摘要。
export class FtpTreeDataProvider implements vscode.TreeDataProvider<FtpNode>, vscode.TextDocumentContentProvider {
private _onDidChangeTreeData: vscode.EventEmitter<any> = new vscode.EventEmitter<any>();
readonly onDidChangeTreeData: vscode.Event<any> = this._onDidChangeTreeData.event;
constructor(private readonly model: FtpModel){ }
public refresh(): any {
this._onDidChangeTreeData.fire();
}
public getTreeItem(element) {/*some code*/}
public getChildren(element) {/*some code*/}
public getParent(element) {/*some code*/}
public provideTextDocumentContent(uri: vscode.Uri, token: vscode.CancellationToken): vscode.ProviderResult<string> {
console.log(uri.path);
return this.model.getContent(uri);
}
Run Code Online (Sandbox Code Playgroud)
正如@Matt Bierner 所说:
“如果您希望更新现有文档的内容,请在 TextDocumentContentProvider 上实现 onDidChange 事件,并使用它来指示 VS Code 应调用 ProvideTextDocumentContent”
我的问题是我必须用_onDidChangeuri 来 fire() 。我最终将这一行添加到我的getTreeItem方法中:
this._onDidChange.fire(element.resource);
现在每个项目都是在打开时重新下载的。
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |