2017-09-11 11 views
0

私は非同期的にフェッチされる2つのプロパティを持っています。これらのプロパティの結果をアプリケーションのビューにバインドしたいと思います。ただし、getプロパティでは、ビューモデルの変数がnullと表示されます。結果が到着したらどうすれば結びつけることができますか?以下のコードでは、それぞれのget関数でuserEmailappVersionがnull/undefinedになっています。typecriptで観察可能なプロパティasyncを設定するには?

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作品ボンネットの下に知りませんが、それは自動的に変更イベントを発生させた場合、あなたはおそらくセッターを定義する必要がありますそれがフックすることができます。バッキング値を変更していますが、多くの組み込みメカニズムをバイパスしている可能性があります。それとも、おそらく手動で通知イベントを発生させる必要があります。 –

答えて

0

観察可能クラスが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" 
      }); 
     }); 
    } 
} 
関連する問題