【发布时间】:2017-03-02 01:09:09
【问题描述】:
我正在尝试创建一个基本的登录屏幕,因为我正在学习 Knockout 和 TypeScript。我正在尝试添加一个“PageMode”枚举,它允许敲除知道我们所处的模式并将数据绑定到 pageMode 属性以正确显示内容。但是,当屏幕加载时,'pageMode' 是未定义的。我怎样才能让它工作?
我创建了 2 个模型,它们将被淘汰视图模型(登录和注册)使用,以及一个用于 PageMode 的枚举。
在设计时,pageMode 是可见的 - 但是当我运行它时,它会因为 pageMode 未定义而失败。
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());
在 HTML 方面,我希望通过以下方式使 div 可见:
<div id="register-box" data-bind="visible: pageMode() == PageMode.Registering">
但是,这也可能是一个问题,因为我认为页面不会知道枚举?
【问题讨论】:
标签: javascript typescript knockout.js enums