KnockoutとTypeScriptを学ぶので、基本的なログイン画面を作成しようとしています。ノックアウトが私たちがどのモードにいるのかを知り、正しく表示するためにpageModeプロパティにデータをバインドする 'PageMode' enumを追加しようとしています。ただし、画面が読み込まれると、 'pageMode'は未定義です。これをどのように機能させることができますか?TypescriptとKnockoutでENUMを使用
ノックアウトビューモデル(ログインと登録)で使用される2つのモデルとPageModeの列挙型を作成しました。
デザイン時に、pageModeは可視ですが、実行すると、pageModeが定義されていないため失敗します。 HTML側で
class LoginModel {
emailAddress: KnockoutObservable<string>;
password: KnockoutObservable<string>;
rememberMe: KnockoutObservable<boolean>;
constructor() {
this.emailAddress = ko.observable("");
this.password = ko.observable("");
this.rememberMe = ko.observable(false);
}
}
class RegisterModel {
emailAddress: KnockoutObservable<string>;
password: KnockoutObservable<string>;
passwordRetry: KnockoutObservable<string>;
constructor() {
this.emailAddress = ko.observable("");
this.password = ko.observable("");
this.passwordRetry = ko.observable("");
}
}
enum PageMode {
LoggingIn,
RecoveringPassword,
Registering
}
class ForgotPassword {
emailAddress: KnockoutObservable<string>;
}
class HomeViewModel {
login: LoginModel;
register: RegisterModel;
pageMode: KnockoutObservable<PageMode>;
isLoginEnabled: KnockoutComputed<boolean>;
constructor() {
this.pageMode(PageMode.LoggingIn);
this.login = new LoginModel();
this.register = new RegisterModel();
this.isLoginEnabled = ko.computed(() => {
return !!this.login.emailAddress() && !!this.login.password();
});
}
ShowRecoverPassword()
{
this.pageMode(PageMode.RecoveringPassword);
}
ShowRegister()
{
this.pageMode(PageMode.Registering);
}
ShowLogin()
{
this.pageMode(PageMode.LoggingIn);
}
}
ko.applyBindings(new HomeViewModel());
、私はこれを経由してのdivが表示されるように期待していた。
<div id="register-box" data-bind="visible: pageMode() == PageMode.Registering">
私はページが知っているだろうとは思わないしかし、それは、あまりにも問題になる可能性があります列挙型?
あなたが提案したその変更は、設計時にエラーをもたらします。むしろpageModeでなければなりません:KnockoutObservable = ko.observable (); ? –
Craig
それは間違いなく動作するはずです。私が知る限り、Typescriptの型推論は宣言を不必要にします –