一:模型标识符

  每个模型都有一个用作唯一标识符的ID属性,以便在不同模型间进行区分。通过id属性我们可以直接访问模型对象当中用于标识符存放的属性,默认属性名为id,但也可以通过设置idAttribute来改名。

如: var _model = Backbone.Model.extend({ idAttribute:'_id'});

  testObj = new _model({...})

设置id : testObj._id = Math.random().toString(36),substr(2);

获取id: var id = testObj._id

二:模型属性的验证 (Backbone.Model自带validate)

为了控制每个值的规范,我们常常需要对模型的属性进行验证。

1:在模型中定义validate()方法来进行属性验证

var _model = Backbone.Model.extend({

  validate:function(attrs){

    if(attrs.name !='test'){ return "name error info";}

}});    attrs参数包含了变化了的属性值,如果不合法,会返回一条错误信息。

2:验证触发时间

  属性验证会在调用save()方法时被触发

  调用set()方法时如果传入{validate:true}作为最后一个参数的话也会触发。

  如:testObj.set('name','test1',{validate:true});  //设置name值时触发验证

在模型验证过程中,仍然可以通过get()和this.attributes来访问到更改之前的属性值

validate会在save()之前调用,参数为save()方法传来的更新的属性值,如果验证错误,则save不会执行,触发invalid事件

3:验证的错误处理函数,失败的验证会触发invalid事件

  a:可以通过模块实例对象绑定invalid事件

     testObj.on('invalid',function(model,error){console.log(error)}

  b:可以把处理验证的方法invalid函数作为参数传给set(),save()等。。

    testObj.set({name:'test01'},{

      invalid:function(model,error){console.log(error)}

    }

4: 手动触发验证 ------isValid方法

  手动检查一个模型是否合法 testObj.isValid(),注:isValid方法不会触发invalid错误处理函数

三:高级的验证方式

默认Backbone提供的一种模型属性验证法validate()需要自己创建验证函数,会花掉很多时间。另外一个Backbone扩展插件Backbone.Validation提供很多验证功能,只需要下载插件,并添加引用就可以使用。Backbone.Validation插件重写了Backbone.Model的validate()方法,因此可以用以前的方式调用validate()和isValid()方法

操作步骤:

1:在初始化时,使用Backbone.Balidation.mixin来扩展Backbone.object()

_.extend(Backbone.Model.prototype, Backbone.Validation.mixin)

2:在validation属性中定义验证规则

如 var _model = Backbone.Model.extend({

  validation:{

    name:{required: true},

    email:{pattern: 'email'}

  }

});

3:使用 var testObj = new _model();

    testObj.set({email:'***@qq.com'},{validate:true})  //只有在设置email时会触发验证

    testObj.isValid(); //false   检测模块是否触发验证

    testObj.get('email') ; //undefine          testObj实例的email属性尚未初始化

4:validation的内置验证器

  required: 验证属性是否是必须的

  acceptance:验证属性值是否被接受。如:对类型为boolean的属性值是否为true or false

    validation:{

      terms:{acceptance:true},

    }

  min:属性值必须是数字且大于等于指定最小值

  max:属性值必须是数字且小于等于指定最大值

  range:属性值必须为数字且等于或在两数值之间     range: [2, 18]

  length:验证字符串的长度

  minLength:验证字符串长度大于或等于指定值

  maxLength:验证字符串长度小于或等于指定值

  rangeLength:验证字符串长度等于或在指定值之间

  oneOf: 验证其值必须为指定数组中的一个         oneOf:["person","organization"]

  equalTo: 验证属性值必须等于指定的另外一个属性值         如: passwordRepeat: {equalTo:'password'}

pattern: 验证属性值为指定的模式,也可以是自己定义的一个正则表达式。内置模式有:“number,digits,email,url”

  如: phoneNumber:{pattern: /^ ********** $/}   自定义正则

四: 使用Backbone.Validation插件验证html表单

  1:在视图的initialize()方法中把视图绑定到Backbone.Validation对象上

    var _view = Backbone.View.extend({

      initialize: function (){

        Backbone.Validation.bind(this);      

      }

    })

  当用户在更新表单的属性值时,如果是非法信息,Backbone.Validation会为该表单元素添加一个invalid样式,并且在data-error属性中设置一条错误信息。

  如:<input type='text' name='name' class='invalid' data-error='Name is required' />

backbonejs中的模型篇(二)的更多相关文章

  1. backbonejs中的模型篇(一)

    一:模型及属性 模型是MVC应用的基石,它负责存放应用所需的数据,对数据的验证,执行访问控制,以及实现应用所需的特定业务逻辑. backbone通过扩展Backbone.Model对象来定义一个模型. ...

  2. backbonejs中的模型篇(三)

    一:在模型中使用嵌套属性 Backbone的扩展插件 Backbone-Nested下载并添加引用 1:定义一个新的模型对象,使用Backbone.NestedModel作为其基类对象 var _mo ...

  3. backbonejs中的集合篇(一)

    一:集合概念 集合是多个模型,如果把模型model理解为表结构中的行,那么集合collection就是一张表,由多个行组成.我们经常需要用集合来组织和管理多个模型. 二:创建集合 1:扩展Backbo ...

  4. [iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之二:lib3ds加载模型

    [iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之二:lib3ds加载模型 作者:u0u0 - iTyran 在上一节中,我们分析了OBJ格式.OBJ格式优点是文本形式,可读 ...

  5. Django中模型(二)

    Django中模型(二) 三.定义模型 1.模型.属性.表.字段间的关系: 一个模型类在数据库中对应一张表:在模型类中定义的属性,对应该模型对照表中的字段. 2.定义属性 A.概述 ·django根据 ...

  6. ThinkPHP中的模型二

    ThinkPHP中的模型 1.为什么要创建数据对象 案例:使用ThinkPHP完成部门管理 ① 设计数据库 ② 创建Dept控制器 路径:./Application/Admin/Controller创 ...

  7. 《高性能javascript》 领悟随笔之-------DOM编程篇(二)

    <高性能javascript> 领悟随笔之-------DOM编程篇二 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...

  8. I/O模型之二:Linux IO模式及 select、poll、epoll详解

    目录: <I/O模型之一:Unix的五种I/O模型> <I/O模型之二:Linux IO模式及 select.poll.epoll详解> <I/O模型之三:两种高性能 I ...

  9. 【GISER&&Painter】Chapter02:WebGL中的模型视图变换

    上一节我们提到了如何在一张画布上画一个简单几何图形,通过创建画布,获取WebGLRendering上下文,创建一个简单的着色器,然后将一些顶点数据绑定到gl的Buffer中,最后通过绑定buffer数 ...

随机推荐

  1. bzoj 2242: [SDOI2011]计算器 BSGS+快速幂+扩展欧几里德

    2242: [SDOI2011]计算器 Time Limit: 10 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 你被 ...

  2. bzoj 2957: 楼房重建 线段树

    2957: 楼房重建 Time Limit: 10 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 小A的楼房外有一大片施 ...

  3. 【网摘】DICOM 基础简介

    一 什么是DICOM?DICOM是Digital Imaging and Communication of Medicine的缩写,是美国放射学会(American College of Radiol ...

  4. 转 cocos2dx内存优化 (之二)

    一.cocos2dx之如何优化内存使用(高级篇) 本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=93 一.内存优化原则 为了优化应用内存,你应该知道 ...

  5. iOS - UISwitch

    前言 NS_CLASS_AVAILABLE_IOS(2_0) __TVOS_PROHIBITED @interface UISwitch : UIControl <NSCoding> @a ...

  6. SAP接口编程 之 JCo3.0系列(04) : 会话管理

    在SAP接口编程之 NCo3.0系列(06) : 会话管理 这篇文章中,对会话管理的相关知识点已经说得很详细了,请参考.现在用JCo3.0来实现. 1. JCoContext 如果SAP中多个函数需要 ...

  7. sql概要

    sql(structured query language) 1.比较运算符一共有六种,分别为等于(=),小于(<),大于(>),小于或等于(<=),大于或等于(>=)以及不等 ...

  8. springmvc企业级开发实战

    一.用eclipse插件搭建项目 二.pom文件 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi ...

  9. HDU5730 FFT+CDQ分治

    题意:dp[n] = ∑ ( dp[n-i]*a[i] )+a[n], ( 1 <= i < n) cdq分治. 计算出dp[l ~ mid]后,dp[l ~ mid]与a[1 ~ r-l ...

  10. XML 解析器

    所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器.解析器把 XML 转换为 XML DOM 对象 - 可通过 JavaScript 操作的对象. 解析 XML 文档为DOM对象 方法一: ...