Я пишу расширение 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);
}
и это мои результаты при нажатии на элементы в моем представлении
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
Ожидаемые результаты будут:
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
Как видите, provideTextDocumentContent
вызывается при первом нажатии на элемент, но при втором нажатии на тот же элемент, он не вызывается. Любая идея, почему это происходит или как я мог заставить vscode вызывать его для каждого клика?
EDIT:
В настоящее время у меня есть событие 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);
}