0

は(私は基礎となるdefinePropertyコールを曖昧以外の、活字体が問題に関連しているとは思わない)、このtypescriptですクラスを考えてみましょう:私はマッピング・プラグインを使用してい定義されたプロパティを更新するにはどうすればよいですか?

class Model 
{ 
    public TeamId: number; 

    constructor() 
    { 
     var self = this; 

     ko.track(this); 

     ko.getObservable(this, "TeamId").subscribe(function (newValue) 
     { 
      var o = ko.getObservable(self, "link"); 
      o.valueHasMutated(); 
     }); 
    } 

    get link(): string 
    { 
     return `/blah/blah/team/${this.TeamId}`; 
    } 
} 

注意を。

プロパティlinkは現在のTeamIdプロパティを使用して、そのチームに適したリンクを作成します。私の問題は:TeamIdプロパティが変更されたときに、linkプロパティもノックアウトにどのように伝えますか?私はsubscribeコールバックがそれをするだろうと考えましたが、getObservableはnullを返します。これは、definePropertyで定義されたプロパティでは機能しないためです。しかし、私はこの構文を使用したいが、これを機能させることができないので、今は止まっている。

答えて

0

私はリンクを計算する必要があると言います。

ko.defineProperty(this, 'link', function() { 
    return `/blah/blah/team/${this.TeamId}`; 
}); 

この方法では、TeamIdに依存関係を作成してから自動的に更新する必要があります。

0

私がプロパティゲッター/セッターを使用するときに行うことは、それらをプライベートバッキング観察可能フィールドと共に使用することです。そうすれば、観測可能なものは外部に隠されますが、あなたは依然として内部的に観測することができます。あなたは自動的に更新値を処理するために計算していることを組み合わせることができ、私はあなたがko.getObservable()ko.track()呼び出しを説明ES5プラグインを使用しているので、計算されたばかりのように見えることを今見、あなたの場合は

private _property = ko.observable('myValue'); 
get property(): string { 
    return this._property(); 
} 
set property(value:string) { 
    this._property(value); 
} 

通常の関数。私は簡単にそれのすべてをテストするが、これはあなたが望むないかどうかを確認することはできません。私の現在の回避策に基づいて

class Model 
{ 
    public TeamId: number; 

    constructor() 
    { 
     var self = this;  
     ko.track(this); 
    } 

    get link(): string 
    { 
     return this.getLink(); 
    } 

    private getLink(){ 
     return `/blah/blah/team/${this.TeamId}`; 
    } 
} 
+0

が、私はこれが動作すると思いますが、それはのようなバッキング機能を作るために持っているような場しのぎですそれはすべての財産のためです。 *プロパティを持つ*目的の多くを打ち負かします。 –

+0

引数がありません。別のES5固有の質問を開いて、より良い方法があるかどうかを確認することもできます。 –

関連する問題