如何在打字稿中设置可观察属性异步?

如何在打字稿中设置可观察属性异步?

问题描述:

我有几个异步获取的属性。我想将这些属性的结果绑定到我的应用程序中的视图。但是,get属性将视图模型的变量视为null。结果到达后我如何将它们绑定?在下面的代码中,userEmailappVersion在它们各自的get函数中为null/undefined。如何在打字稿中设置可观察属性异步?

export class AccountViewModel extends Observable { 
    private _userEmail : Email; 
    private _appVersion : string; 

    constructor() { 
     super(); 

     appVersion.getVersionName().then(
      (result) => 
      { 
       this._appVersion = result; 
       console.log(this._appVersion); 
      }); 

     firebase.getCurrentUser().then(
      (result) => { 
       this._userEmail = new Email(result.email); 
      }); 
    } 

    get userEmail(): string { 
     return this._userEmail != null ? this._userEmail.Value : ""; 
    } 

    get appVersion(): string { 
     return this._appVersion; 
    } 

    public logout() { 
     firebase.logout().then((result) => { 
      Navigator.navigateTo({ 
       moduleName : "views/register/register", 
       backstackVisible : false, 
       clearHistory : true 
      }) 
     }).catch((error) => { 
      dialogs.alert({ 
       title: "Error", 
       message: "A system error occurred trying to logout.", 
       okButtonText: "Ok" 
      }); 
     }); 
    } 
} 
+0

我不知道引擎盖下,但如何运作nativescript如果自动提高你变动事件,你可能必须定义制定者它可以挂钩进去。你正在改变支持价值,但你可能绕过了很多内建机制。这或者你可能不得不手动提高通知事件。 –

可观察到的类有一个notifyPropertyChange方法:)

export class AccountViewModel extends Observable { 
    private _appVersion : string; 

    constructor() { 
     super(); 

     appVersion.getVersionName().then((result) => { 
      this._appVersion = result; 
      this.notifyPropertyChange("appVersion", this._appVersion); 
     }); 
    } 

    get appVersion() : string { 
     return this._appVersion; 
    } 

    public logout() { 
     firebase.logout().then((result) => { 
      Navigator.navigateTo({ 
       moduleName : "views/register/register", 
       backstackVisible : false, 
       clearHistory : true 
      }) 
     }).catch((error) => { 
      dialogs.alert({ 
       title: "Error", 
       message: "A system error occurred trying to logout.", 
       okButtonText: "Ok" 
      }); 
     }); 
    } 
}