2017-09-11 4 views
0

J'ai quelques propriétés qui sont récupérées de manière asynchrone. Je voudrais lier le résultat de ces propriétés à une vue de mon application. Toutefois, les propriétés get voient les variables du modèle de vue comme nulles. Comment puis-je les lier après l'arrivée du résultat? Dans le code ci-dessous, userEmail et appVersion sont null/indéfinis dans leurs fonctions get respectives.Comment définir les propriétés observables async dans le typecript?

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

Je ne sais pas comment fonctionne nativescript sous le capot, mais si elle augmente automatiquement les événements de changement pour vous, vous auriez probablement à définir setters que ça pourrait s'accrocher. Vous modifiez la valeur de sauvegarde, mais vous contournez probablement un grand nombre de mécanismes internes. Cela ou vous devez probablement augmenter les événements de notification manuellement. –

Répondre

0

La classe Observable a une méthode 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" 
      }); 
     }); 
    } 
}