Knockoutjs验证和服务器验证

时间:2012-03-09 09:45:33

标签: html5 knockout.js knockout-mapping-plugin

嗨,我对Knockoutjs不熟悉,我想要发布一个表格,我有一个电子邮件地址,要求电子邮件地址必须是唯一的。

在服务器上,我检查电子邮件地址是否唯一,然后返回一个validationjson类,例如

{  isEmailUnique:false,  isPasswordStrongEnough:true; }

我如何使用knockoutjs验证以简洁的方式显示这些错误?

2 个答案:

答案 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做的,而且效果很好。