Javascript Knockoutjs即时验证
我已经使用AMD创建了一个knockoutjs应用程序。现在我有点被验证卡住了。以下是ViewModel代码:Javascript Knockoutjs即时验证,javascript,validation,knockout.js,Javascript,Validation,Knockout.js,我已经使用AMD创建了一个knockoutjs应用程序。现在我有点被验证卡住了。以下是ViewModel代码: define(['knockout', 'hasher', 'text!./login-window.html'], function (ko, hasher, templateMarkup) { 'use strict'; function LoginWindowViewModel(params) { //observables
define(['knockout', 'hasher', 'text!./login-window.html'],
function (ko, hasher, templateMarkup) {
'use strict';
function LoginWindowViewModel(params) {
//observables
this.properties = ko.validatedObservable({
username: ko.observable().extend({
required: { message: 'Please supply your user name' }
}),
password: ko.observable().extend({
required: { message: 'Please supply your password' }
})
});
}
return { viewModel: LoginWindowViewModel, template: templateMarkup };
});
<div data-bind="css: { 'form-group': true, 'has-error': !properties().username.isValid() }">
<label for="input-username" class="col-lg-3 control-label">Username</label>
<div class="col-lg-9">
<input type="text" name="input-username" class="form-control" data-bind="value: properties().username" />
</div>
</div>
<div data-bind="css: { 'form-group': true, 'has-error': !properties().password.isValid() }">
<label for="input-password" class="col-lg-3 control-label">Password</label>
<div class="col-lg-9">
<input type="text" name="input-password" class="form-control" data-bind="value: properties().password" />
</div>
</div>
define(['knockout','hasher','text!。/login window.html'],
函数(ko、hasher、templateMarkup){
"严格使用",;
函数LoginWindowViewModel(参数){
//可观测
this.properties=ko.validatedObservable({
用户名:ko.observable().extend({
必需:{消息:'请提供您的用户名'}
}),
密码:ko.observable().extend({
必需:{消息:“请提供密码”}
})
});
}
返回{viewModel:LoginWindowViewModel,template:templateMarkup};
});
用户名
密码
问题是,在页面加载时,knockout将has errors
类添加到“包装器div”(那些带有表单组的类)。用户在绑定输入中键入内容后,如何启用验证
在您指出我之前:-我对显示验证消息没有问题,但是当div被添加到一个此时不应该有的类时。我想出了一个临时解决方案,但我不喜欢它,所以任何有更好想法的人-请站出来:)
html有趣的部分是:
<div data-bind="css: { 'form-group': true, 'has-error': shouldValidateUsername() }">(...)
(…)
我正在切换可观察的验证,从而打开和关闭验证。在绑定上尝试以下操作:
css: { 'form-group': true, 'has-error': !properties().username.isValid() && properties().username.isModified() }
基本上,我们正在检查observable是否已被修改以表示错误。
isModified是通过ko验证自动插入的可观察对象
如果视图模型中的某些内容实际将可观测值设置为空或空(例如某些初始化代码),则需要:
properties().username.isModified(false)
我还没有测试它,因此可能需要一些调整如果您只是想影响显示,那么这样做如何:添加一个css:{showValidation:hasBeenSubmitted}
绑定到您的表单。第一次提交表单后,将hasBeenSubmitted
observable设置为true。像这样定义CSS.showValidation.has error{…}
。这样.has error
在页面加载时不起作用。您不必添加任何自定义逻辑,只需在主视图模型上添加一个额外的可观察对象。当然,您可以实现一个hasBeenModified
observable,而不是hasBeenSubmitted
。
properties().username.isModified(false)