2017-09-11 1 views
0

비동기 적으로 가져 오는 몇 가지 속성이 있습니다. 이러한 속성의 결과를 응용 프로그램의보기에 바인딩하고 싶습니다. 그러나 get 속성은 뷰 모델의 변수를 null로 봅니다. 결과가 도착한 후에 어떻게 묶을 수 있습니까? 아래 코드에서 userEmailappVersion은 해당 get 함수에서 null/undefined입니다.typescript에서 관찰 가능한 속성 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

나는 그것이 자동으로 당신을 위해 변경 이벤트를 제기하는 경우, 당신은 아마 setter를 정의 할 필요가 얼마나 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" 
      }); 
     }); 
    } 
} 
관련 문제