Backbone 1.0.0 版 API _ Backbone.Model validate 解析

原创 2013年12月02日 11:29:52

  最近一段时间在学习backbone,发现网上的很多资料都是旧版本的,有一些儿不适用于backbone1.0.0的最新版,尤其validate这个方法的用法。

        最老的旧版中,说的是:调用model的set方法会默认调用model的validate方法;稍微旧的版本中,说到调用model的set方法,传入{silent: true},可以启动validate校验,调用save方法会强制进行校验;在1.0.0的版本中,我们来看下官网的explain:

validatemodel.validate(attributes, options) 
This method is left undefined, and you're encouraged to override it with your custom validation logic, if you have any that can be performed in JavaScript. By defaultvalidate is called before save, but can also be called before set if {validate:true}is passed. The validate method is passed the model attributes, as well as the options from set or save. If the attributes are valid, don't return anything from validate; if they are invalid, return an error of your choosing. It can be as simple as a string error message to be displayed, or a complete error object that describes the error programmatically. If validate returns an error, save will not continue, and the model attributes will not be modified on the server. Failed validations trigger an "invalid"event, and set the validationError property on the model with the value returned by this method.

 

        validate方法在Backbone.Model中留下来,在继承Model的时候重写(自定义)validate方法。调用save方法前默认会调用validate方法,当然调用set方法,如果传入{validate: true}也可以调用validate方法。

        如果向model添加的attribute通过校验,validate不会返回任何值,如果没有通过校验(invalid),会返回你在validate方法中定义的错误。校验失败,会触发invalid事件,并且填充model的validateErro属性值。

 

Js代码 
  1. var Chapter = Backbone.Model.extend({  
  2.   validate: function(attrs, options) {  
  3.     if (attrs.end < attrs.start) {  
  4.       return "can't end before it starts";  
  5.     }  
  6.   }  
  7. });  
  8.   
  9. var one = new Chapter({  
  10.   title : "Chapter One: The Beginning"  
  11. });  
  12.   
  13. one.on("invalid"function(model, error) {  
  14.   alert(model.get("title") + " " + error);  
  15. });  
  16.   
  17. one.save({  
  18.   start: 15,  
  19.   end:   10  
  20. });  

 

如果你在chrome下跑个demo,你会发现save方法如果不传入{validate: true},即使验证不通过,one.toJSON()会发现start和end的值还是改变了

 

Js代码 
  1. var Chapter = Backbone.Model.extend({  
  2.   validate: function(attrs, options) {  
  3.     if (attrs.end < attrs.start) {  
  4.       return "can't end before it starts";  
  5.     }  
  6.   }  
  7. });  
  8.   
  9. var one = new Chapter({  
  10.   title : "Chapter One: The Beginning"  
  11. });  
  12.   
  13. one.on("invalid"function(model, error) {  
  14.   alert(model.get("title") + " " + error);  
  15. });  
  16.   
  17. one.save({  
  18.   start: 15,  
  19.   end:   10  
  20. });  
  21. 输出:false  
  22. one.toJSON()  
Js代码 
  1. 输出:Object {title: "Chapter One: The Beginning", start: 15, end: 10}  
  2. one.save({  
  3.   start: 25,  
  4.   end:   10  
  5. });  
  6. 输出:false  
  7. one.toJSON()  
  8. 输出:Object {title: "Chapter One: The Beginning", start: 25, end: 10}  
  9. one.save({  
  10.   start: 35,  
  11.   end:   10  
  12. }, {validate: true});  
  13. 输出:false  
  14. one.toJSON()  
  15. 输出:Object {title: "Chapter One: The Beginning", start: 25, end: 10}  

Backbone入门指南(四):Model(数据模型)

http://yujianshenbing.iteye.com/blog/1748571 7. Model (数据模型)   Model是Backbone中所有数据模型的基类,用于封装原始数据,...
  • qfgg3
  • qfgg3
  • 2017年01月12日 09:47
  • 433

jQuery-Validate表单验证中文API

名称 返回类型 描述 validate(options) 返回:Validator 验证所选的FORM ...
  • zy846771221
  • zy846771221
  • 2015年08月19日 14:15
  • 1126

Backbone入门指南(六):View (视图)

9. View (视图控制器)   我们在前面的章节中介绍了Model和Collection,它们都是用于数据管理和交互,在本章我们讨论如何使用视图(View)将这些数据渲染到界面,以及如何管理界面...
  • likun557
  • likun557
  • 2016年11月15日 13:28
  • 700

Backbone入门基础 - Model和View事件

对Backbone 中的Model和View事件进行简单介绍
  • joyce_lcy
  • joyce_lcy
  • 2016年08月29日 14:54
  • 1097

Backbone入门指南(一):什么是Backbone?

1. 前言   本文的目的,是帮助大家快速理解掌握Backbone的使用,但它并不是API,因此我不会将每一个方法都详细地描述,但是我会告诉你如何学习它们。   这是一篇稍稍较长的技术文章,因为我...
  • likun557
  • likun557
  • 2016年11月14日 15:59
  • 5211

Backbone.js 简易入门教程

因为最近的工作中使用到了backbone.js框架,所以在网上找了些资料,但是关于这个框架的中文资料实在是太少了,没有办法,只好自己翻译了壹篇简单的入门教材。如果翻译得不好,请大家口下留情。另外,大家...
  • huang100qi
  • huang100qi
  • 2014年03月25日 23:26
  • 6273

Backbone.js中events中事件不生效

使用 Backbone 的 View 时,可以象传统 jQuery 那样定义事件,$("selector").click(function(){...})。幸运的是 Backbone 让我们在 V...
  • zhuchunyan_aijia
  • zhuchunyan_aijia
  • 2016年01月04日 11:48
  • 1694

Backbone入门讲解

原文:http://www.cnblogs.com/chaojidan/p/4207227.html Backbone是一个实现了web前端mvc模式的js框架。 一种解决问题的通用方法,我们叫...
  • Joyhen
  • Joyhen
  • 2015年01月08日 18:54
  • 8418

Backbone源码分析-Backbone架构+流程图

参考资料 http://documentcloud.github.com/backbone/  http://www.csser.com/tools/backbone/backbone.j...
  • yongxiaokang1
  • yongxiaokang1
  • 2016年02月25日 18:25
  • 499

第四章 Backbonejs中的Router实践

第四章 Backbonejs中的Router实践 前面介绍了Model和Collection,基本上属于程序中静态的数据部分。这一节介绍Backbone中的router,属于动态的部分,见名知意...
  • cdnight
  • cdnight
  • 2014年10月21日 21:18
  • 3752
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Backbone 1.0.0 版 API _ Backbone.Model validate 解析
举报原因:
原因补充:

(最多只允许输入30个字)