嗨,我对Knockoutjs不熟悉,我想要发布一个表格,我有一个电子邮件地址,要求电子邮件地址必须是唯一的。
在服务器上,我检查电子邮件地址是否唯一,然后返回一个validationjson类,例如
{ isEmailUnique:false, isPasswordStrongEnough:true; }
我如何使用knockoutjs验证以简洁的方式显示这些错误?
答案 0 :(得分:4)
我会为此使用两个不同的服务器端验证器,因为它们会影响视图模型中的不同observable。
最初取自knockout validation readme
ko.validation.rules['isEmailUnique'] = {
validator: function(val, param){
var isValid = true;
$.ajax({
async: false,
url: '/validation/isEmailUnique',
type: 'POST',
data: { value: val, param: param },
success: function(response){
isValid = response === true;
},
error: function(){
isValid = false; //however you would like to handle this
}
});
return isValid;
},
message: 'The Email is not unique'
};
然后在服务器上,您需要创建一个端点,在您执行查找时接受POST请求,然后根据查询结果返回true或false。
使用上述验证器
this.email = ko.observable()
.extend({
isEmailUnique: {
message: 'Something else perhaps? It will override the message in the validator'
}
});
您可以使用完全相同的密码强度验证。
使用这样的验证器会在可观察的更改时触发验证,这可能是一种有用的验证方法。
答案 1 :(得分:2)
我有点晚了,但是对于我2美分的价值,我会采用更通用的方法,例如从服务器端点(例如/ Register)返回标准的JSON序列化AjaxResult类,并使用Data等属性(任意容器,例如,用于与映射插件重新绑定的更新模型),以及验证消息字符串的集合等。然后,您可以获得绑定到ObservableArray的HTML验证摘要并推送/映射来自Ajax结果的消息进入那里。这基本上就是我一直在使用Knockout做的,而且效果很好。