2016-08-26 8 views
3

私は(ページがCustomerExperienceが未定義であることについて不平を言う)は、この作品を作るためにしようとしている:typecriptのenum値をknockout data-bindから参照する方法は?

CustomerExperienceは活字体で定義されている
<div data-bind="visible: $data.customerExperienceObservable() === CustomerExperience.Loading"> 
    Loading... 
</div> 

にtranspiled
export enum CustomerExperience { 
    Loading = 1, 
    Unconfigured = 2, 
    Data = 3 
} 

(function (CustomerExperience) { 
    CustomerExperience[CustomerExperience["Loading"] = 1] = "Loading"; 
    CustomerExperience[CustomerExperience["Unconfigured"] = 2] = "Unconfigured"; 
    CustomerExperience[CustomerExperience["Data"] = 3] = "Data"; 
})(exports.CustomerExperience || (exports.CustomerExperience = {})); 
var CustomerExperience = exports.CustomerExperience; 

1つのクラスのインスタンスにコンテキストを適用します。

ko.applyBindings(dataProvider); 

私は、CustomerExperienceをバインドされたdataProviderのプロパティとして定義すると、動作させることができます。しかし、私はTypeScript列挙型でそれを行う方法を理解しようとしています。

アイデア? :)

PS:今のところ私はそれを動作させるために=== 1を使用しました。このソリューションで終わった

+0

はあなたが計算観測可能にロジックを移動すると考えたことがありますか?そうすれば、マークアップの整数値に依存することなく素敵で読みやすい列挙型を保つことができます。 –

+0

@CarrieKendall、もう少し詳しく解説していただけますか? 変数を次のように定義しました。 public customerExperienceObservable:KnockoutObservable = ko.observable (CustomerExperience.Loading); – ZakiMa

+1

'$ data.customerExperienceObservable()=== CustomerExperience.Loading'をノックアウトモデル内のKnockoutComputed変数に移動します。それでバインディングでは 'visible:$ data.isLoaded'のように使用します –

答えて

1

(キャリー・ケンドールありがとう!):

public customerExperienceLoading: KnockoutComputed<boolean> = ko.computed({ 
    owner: this, 
    read: () => { 
     return this.customerExperienceObservable() === CustomerExperience.Loading; } }); 

と通常のboolean型としてそれをバインド:

data-bind="visible: $data.customerExperienceLoading() === true" 
関連する問題