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
backbone学习笔记:模型(Model)(2)属性验证的更多相关文章
- Backbone学习笔记一Backbone中的MVC
原文章地址http://bigdots.github.io/2015/12/01/Backbone学习笔记(一)/#more Backbone.js为复杂WEB应用程序提供模型(models).集合( ...
- SQL反模式学习笔记6 支持可变属性【实体-属性-值】
目标:支持可变属性 反模式:使用泛型属性表.这种设计成为实体-属性-值(EAV),也可叫做开放架构.名-值对. 优点:通过增加一张额外的表,可以有以下好处 (1)表中的列很少: (2)新增属性时,不需 ...
- SQL反模式学习笔记8 多列属性
目标:存储多值属性 反模式:创建多个列.比如一个人具有多个电话号码.座机号码.手机号码等. 1.查询:多个列的话,查询时可能不得不用IN,或者多个OR: 2.添加.删除时确保唯一性.判断是否有值:这些 ...
- Python3+Selenium3+webdriver学习笔记10(元素属性、页面源码)
#!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记10(元素属性.页面源码)'''from selenium i ...
- backbone学习笔记:模型(Model)(1)基础知识
backbone为复杂Javascript应用程序提供MVC(Model View Controller)框架,框架里最基本的是Model(模型),它用来处理数据,对数据进行验证,完成后台数据与前台数 ...
- 【再探backbone 01】模型-Model
前言 点保存时候不注意发出来了,有需要的朋友将就看吧,还在更新...... 几个月前学习了一下backbone,这段时间也用了下,感觉之前对backbone的学习很是基础,前几天有个园友问我如何将路由 ...
- tensorflow学习笔记——模型持久化的原理,将CKPT转为pb文件,使用pb模型预测
由题目就可以看出,本节内容分为三部分,第一部分就是如何将训练好的模型持久化,并学习模型持久化的原理,第二部分就是如何将CKPT转化为pb文件,第三部分就是如何使用pb模型进行预测. 一,模型持久化 为 ...
- 学习笔记之Model selection and evaluation
学习笔记之scikit-learn - 浩然119 - 博客园 https://www.cnblogs.com/pegasus923/p/9997485.html 3. Model selection ...
- Asp.net MVC4高级编程学习笔记-模型学习第五课MVC表单和HTML辅助方法20171101
MVC表单和HTML辅助方法 一.表单的使用. 表单中的action与method特性.Action表示表单要提交往那里,因此这里就有一个URL.这个URL可以是相对或绝对地址.表单默认的method ...
随机推荐
- 【合集】TiDB 源码阅读系列文章
[合集]TiDB 源码阅读系列文章 (一)序 (二)初识 TiDB 源码 (三)SQL 的一生 (四)INSERT 语句概览 (五)TiDB SQL Parser 的实现 (六)Select 语句概览 ...
- label文字居中
height: height,//"20px" "line-height": height, autosize:true, &qu ...
- Casual Note of OS
20170104 冯诺依曼计算机(遵循冯诺依曼结构设计的计算机:存储器.运算器.控制器.输入设备.输出设备)之前也有计算机,不过在那之前的计算机是专用的,不可编程,只能干特定的事情没法干其他事.与之前 ...
- android选取系统相册图片后,识别图中二维码
项目中添加设备操作需要扫描二维码,考虑到多种扫码方式,也添加直接识别二维码图片的操作. 首先跳转系统相册选取图片 Intent intent = new Intent(Intent.ACTION_PI ...
- css实现三角形及应用示例
css实现三角形,网上讲了很多,但我发现一般都是三角向上或者向下的,向左向右这两方向似乎讲得很少,本人试了一下,发现原来在IE下很难搞~~(万恶的IE)...css实现三角形的原理是:当元素的宽高为0 ...
- 如何将baidu地图中的baidu logo 去掉
今天我的老大问我是不是可以将baidumap 的js版中baidu logo 去掉.我上网查询一下,有各种方法,比如将对应的logo div remove hide 等等,这些都是需要JS 函数触发执 ...
- 【android】环形进度条实现
先上效果图(压缩尺寸后出现锯齿,原图边缘很细腻的喂~) 特性: 1:支持环形带字 .环形不带字(中间盖上圆形图片,实现天天动听播放器在通知栏播放进度的效果).实心 2:线程安全,不需要写handler ...
- 关于Unity中Time.deltaTime的使用
例子 void Update () { this.transform.Rotate(Vector3.up, Time.deltaTime * 50, Space.World); //绕世界的y轴旋转, ...
- 通配符的匹配很全面, 但无法找到元素 'context:property-placeholder'
解决方案就是如下: xmlns:context="http://www.springframework.org/schema/context" 同时在xsi:schemaLocat ...
- Volley的Get、Post方式(JsonObjectRequest、StringRequest)以及Volley获取图片的3种方式
activity_main.xml 里面什么也没有 AndroidManifest.xml(重点是android:name="com.example.volley.MyApplication ...