backbone学习笔记:模型(Model)(2)属性验证

Backbone的属性验证有2种方法:

  1.Backbone自带简单的验证方法,但是验证规则需要自己实现

     通过validate()方法进行验证,验证规则写在此方法里。     

var  RoomModel = Backbone.Model.extend({
   
    validate:function(attrs){
         //验证规则
        if(!attrs.name){
            return "名字不能为空";
        }

    }

});

那么什么时候调用validate()完成验证呢?

   在调用save()方法时validate()方法被触发,来完成验证,如果validate()返回错误信息,那么save()方法会停止执行,模型的属性也不会被更改。失败的验证还会触发invalid事件。

   如果在set()方法中传入参数{validate:true},作为最后一个参数,也会触发validate()方法,完成验证。

   var room =new RoomModel()

    room.set('name','test',{validate:true})

以上都是属性的自动验证

属性的手动验证:room.isValid()//返回true/false,这种验证不会触发invalid事件 

  2.利用Backbone扩展插件Backbone.Validation进行属性验证,Backbone.Validation重写了validate()方法,常用的验证规则已经实现,可以直接使用,节约时间

    首先要从GitHub网站上下载Backbone.Validation,然后引用文件backbone-validation.js。

   使用Backbone.Validation.mixin来扩展Backbone.object():_.extend(Backbone.Model.prototype,Backbone.Validation.mixin)

    在validation属性中定义具体的验证规则    

var UserModel = Backbone.Model.extend({
     validation:{
         name:{
              required:true
         },
         email:{
              pattern: 'email'
        }

     }
});

     验证属性:

          1. required:验证模型的某个属性是否必须,值为true/false

          2.acceptance:验证某些事情是否被接收,值为true/false

          3.min:验证属性值,必须为数字,模型某个属性值只有大于或等于指定的最小值才能验证成功

          4.max:验证属性值,必须为数字,模型某个属性值只有小于或等于指定的最大值才能验证成功

          5.range:验证属性值,必须为数字,模型某个属性值只有等于指定的某个数值或者在指定的两个值之间才能验证成功

          6.length:验证属性值,模型某个属性值的长度必须为指定长度的字符串。

          7.minLength:验证属性值,必须为数字,模型某个属性值的长度只有大于或等于指定的最小值才能验证成功

          8.maxLength:验证属性值,必须为数字,模型某个属性值的长度只有小于或等于指定的最大值才能验证成功

          9.rangeLength:验证属性值,必须为数字,模型某个属性值的长度只有等于指定的某个数值或者在指定的两个值之间才能验证成功

          10.one Of:用来验证属性值,必须等于指定的数组当中的一个元素,是区分大小写的

          11.equalTo: 验证等于指定另外一个的属性值

          12.pattern:验证匹配指定的模式,模式可以是正则表达式,也可以是内置的模式名称

                      内置模式名称:

                          number:匹配任意十进制的数字

                          digits:匹配任意数字序列

                          email:匹配合法的邮件地址

                           url:匹配任意合法的URL

 

  

原文地址:https://www.cnblogs.com/greenteaone/p/4322980.html