- 浏览: 229454 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
annyliyear:
找到的ExtJS实现多选下拉框3个代码 -
yinboxian:
源码太乱了
JXTA中使用JxtaServerPipe和JxtaBiDiPipe实现双向可靠的通信 -
yinboxian:
我的peers第一次执行时可以得到正确的结果,以后就不行了。不 ...
JXTA中基于管道监听方式通信 -
cuizhenfu#gmail.com:
http://www.cnblogs.com/cuizhf
JXTA中使用JxtaServerPipe和JxtaBiDiPipe实现双向可靠的通信 -
luxing44530:
请问, jsp页面如果在 META-INF 中, 改怎么访问? ...
Servlet3.0 新特性之模块化实践
常常,项目中创建,修改数据时,都会对前台提交的数据验证,转变。然后再提交给后台处理,这个步骤 是我们开发人员一定要完成的工作。在之前,我们在做数据验证或者转变时,都是把各种验证和数据转变都 写成各种函数放在工具文件中,让整个项目需要的地方调用。
那我们如果使用JavaScriptMVC开发Web项目时,也可以这样验证吗?答案是肯定的。但是,如果我们按之前 的方法来完成验证和转变,那真的是浪费了MVC框架了,它让我们写的验证和数据转变不现写在控制层,而是 把它放在了数据层,这样是不是更符合对象编程规范呢,而且阅读和维护起来更加方便快捷。
好了,讲了JavaScriptMVC的数据验证和转变的好处,下面让我们来一起学习在JavaScriptMVC中如何验证和转变 数据。
首先,我们来讲解我们最常用的验证,不管我们在那个项目都会完成这个工作,对于各种验证手法,想念大家都 也已经了解,在这里我不会大量的举例各种验证,我只是把JavaScriptMVC中它提供了那些工具,让我们更加方便 编写验证代码,而且全部满足我们平常的需求。
那JavaScriptMVC是自带验证功能的呢,查看了API,原来验证功能是JavaScriptMVC的
Model下面的一个模块validations, 就是它帮我们完成了一些常用的验证,而且还保留了给用户自定义验证的接口。 那Validations提供了那些常用验证函数,又是如何给用户提供自定义验证的接口呢?下面我们一一列出。
/** * 函数 validateFormatOf * * 验证属性值是否符合正则表达式 * @param {Array|String} 属性或者属性组 * @param {RegExp} 验证的正则表达式 * @param {Object} 可选项,这里只提供2个特殊标识,message:自己错误信息,testIf:是否执行验证函数,返回true则执行,false,不执行 * 例如:validateFormatOf(["name"],/(d+)/,{message:'不符合表达式',testIf:function(){return false;}}); */ /** * 函数 validateInclusionOf * * 难属性值是否在给出的验证数组内 * @param {Array|String} 属性或者属性组 * @param {Array} 验证包含的数组 * @param {Object} 可选项,这里只提供2个特殊标识,message:自己错误信息,testIf:是否执行验证函数,返回true则执行,false,不执行 * 例如:validateInclusionOf(["name"],["lisi","test"],{message:'不在所给文本内',testIf:function(){return false;}}); * * 判断属性name的内容是否是lisi或者test,如果是,则返回正确,否则,返回错误信息 * */ /** * 函数 validateLengthOf * * 判断属性值文本的长度是否在给出的范围内 * @param {Array|String} 属性或者属性组 * @param {Number} 属性值文本最小长度 * @param {Number} 属性值文本最小长度 * @param {Object} 可选项,这里只提供2个特殊标识,message:自己错误信息,testIf:是否执行验证函数,返回true则执行,false,不执行 * 例如:validateLengthOf(["name"],2,5,{message:'文本长度大于5或者小于2',testIf:function(){return false;}}); * */ /** * 函数 validatePresenceOf * * 属性值是否为空判断 * Validates that the specified attributes are not blank. See [jquery.model.validations validation] for more on validations. * @param 属性或者属性组 * @param {Object} 可选项,这里只提供2个特殊标识,message:自己错误信息,testIf:是否执行验证函数,返回true则执行,false,不执行 * 例如:validatePresenceOf(["name"],{message:'文本为空',testIf:function(){return false;}}); * */ /** * 函数 validateRangeOf * * 属性值大小是否在范围内 * @param {Array|String} 属性或者属性组 * @param {Number} 数值最小值 * @param {Number} 数值最大值 * @param {Object} 可选项,这里只提供2个特殊标识,message:自己错误信息,testIf:是否执行验证函数,返回true则执行,false,不执行 * 例如:validatePresenceOf(["name"],2,5,{message:'数值小于2或者大于5',testIf:function(){return false;}}); * * */
以下是Validations提供5个常用验证函数,它们都是静态方法,可以在Model中直接调用 说完上面5个函数,我们发现怎么错误信息都是英文的,而且很简单,那能不能替换成自己的错误信息呢?
当然能,而且Validations提供了2种方式替换成自己的错误信息。
最直接一种就就是修改Validations这个属性:
validationMessages :{
format:"is invalid",
inclusion:"is not a valid option(perhaps out of range)",
lengthShort:"is too short",
lengthLong:"is too long",
presence:"can't be empty",
range:"is out of range";
}
上面这些信息就是5个函数提供的信息,我们可以替换成自己的错误信息。
另外一种就是在函数最后一个参数里传递我们自定义的错误信息。例如: this.validateLengthOf("description",2,5,{message:'自定义的错误信息';});至此,5个函数就讲完。
另外一种就是在函数最后一个参数里传递我们自定义的错误信息。例如: this.validateLengthOf("description",2,5,{message:'自定义的错误信息';});至此,5个函数就讲完。
最后一个就是给用户留下的自定义验证接口,当然我们也可以自己写自定义去完成上面5个函数的功能。
其实在我们很多项目中,用到最多的应该是这个函数,因为实际情况比较复杂,所以大多数都需要我们自己定义验证和返回自定义的错误信息。
最后我们看看Validations还给我们提供了一个跳过验证的选项,我们有时候测试的时候不想用到验证,但是我们又已经写了验证,是不是删除掉,然后要用的时候再加回来呢? 在这里完成不会,我们直接使用Validations提供的
一个选项testIf就可以达到这个目的,例如:
this.validateInclusionOf("date", ['test', 'aaaa'], { testIf : function() { return false;// 返回false,不对date验证,如果返回true,则验证; } });
下面让我们让例子来实践:
//模型代码:
$.Model("Contact", { init : function() { this.validate("birthday", function() { if (this.birthday == null) { return "your birthday needs to be formatted YYYY-MM-DD"; } if (this.birthday > new Date) { return "your birthday needs to be in the past"; } }); this.validateLengthOf("description", 2, 5, { message : '自定义的错误信息 ' }); this.validateInclusionOf("date", ['test', 'aaa'], { testIf : function() { return false; } }); }, attributes : { birthday : 'date', name : 'string' }, findAll : "/contacts.json", update : "/contacts/{id;}.json" }, { ageThisYear : function() { return new Date().getFullYear() - this.birthday.getFullYear(); }, getBirthday : function() { return "" + this.birthday.getFullYear() + "-" + (this.birthday.getMonth() + 1) + "-" + this.birthday.getDate(); } });
//控制器代码
$.Controller('Msgmanage.Message.Create', { init : function() { this.element.html(this.view()); }, submit : function(el, ev) { ev.preventDefault(); this.element.find('[type=submit]').val('Creating...'); var model = new Msgmanage.Models.Message(el.formParams()); // 打印验证错误信息 console.info(model.errors()); }, saved : function() { this.element.find('[type=submit]').val('Submit'); this.element[0].reset(); } });
数据格式转换(convert)
所谓数据格式转换,就是把同一个数据转换成不同的格式。
例如:日期的格式,有时候我们前台显示的日期格式是2010-12-12,但是后台响应给我们的格式是2012:12:12。这样就需要我们在显示数据之前,把数据转换过来。
在JavaScriptMVC中提供了2种方式:Setter和Convert。虽然2种方式,但是其它他们的作用域是不一样的,如果是一个很特殊的字段需要转换成一个很特殊的格式,那本人觉得使用Setter比较好,但是如果是一种类型的数据格式那使用Convert方式会更合理。
下面让我们介绍Setter:
// A contact model $.Model("Contact", { findAll : "/contacts.json" }, { // 我们可以通过模型中的setter,转换出生日期的格式,我们可以看到, //使用Setter,只是在一个地方可以使用,不能给其它字段共用 setBirthday : function(raw) { if (typeof raw == 'string') { var matches = raw.match(/(\d+)-(\d+)-(\d+)/) return new Date(matches[1], (+matches[2]) - 1, matches[3]) } else if (raw instanceof Date) { return raw; } } });
Convert:
$.Model("Contact", { attributes : { birthday : 'date' }, convert : { // 使用convert,我们主要在属性里指定birthday的数据类型为date, //那么就是会调用到这个转换函数,如果其它字段也日期类型,那么,我们指定数据为date即可, // 从这里我们就可以看到,这个是可以公用的,但是我们也看到它的局限性, //它只能给这个模型使用,如果其它模型也想定义日期类型,是不是又得复制过去呢 // 这样的作法明显不好,所以,我们还是回到正常的写法,把这个函数自定到工具类中, //然后在convert中调用,这样,我们就可以使用同一份代码了 date : function(raw) { if (typeof raw == 'string') { var matches = raw.match(/(\d+)-(\d+)-(\d+)/) return new Date(matches[1], (+matches[2]) - 1, matches[3]) } else if (raw instanceof Date) { return raw; } } } }, {// No prototype properties necessary })
最终的代码,定义一个工具类:
$.Class("Util", { valDate : function(raw) { if (typeof raw == 'string') { var matches = raw.match(/(\d+)-(\d+)-(\d+)/) return new Date(matches[1], (+matches[2]) - 1, matches[3]) } else if (raw instanceof Date) { return raw; } } }, {});
再在模型中调用这个工具的函数:
$.Model("Contact", { attributes : { birthday : 'date' }, convert : { date : function(raw) { return Util.valDate(raw); } } }, { // No prototype properties necessary })
至此,我们讲解数据处理就先讲到这里了。
发表评论
-
test
2012-11-21 19:31 0关于请假: 1、做好工作安排,回复华为正式邮件! 2、回去 ... -
JavaScriptMVC之实战
2012-06-09 15:05 1910JavaScriptMVC之实战 下面我们通过一个真实的项目 ... -
JavaScriptMVC之快速开发
2012-04-28 21:53 4374有些同学反映说,需要看太多的篇章才能明白如何使用JavaScr ... -
JavaScriptMVC之语言助手
2012-04-26 21:00 1402在这篇文章,我只挑 ... -
JavaScriptMVC之专用事件
2012-04-26 20:32 1530JavaScriptMVC提供了一串很 ... -
JavaScriptMVC之Model
2012-04-25 22:52 1991Model顶层负责程序的数据层,使用它可以很容易做以下操作: ... -
JavaScriptMVC之View
2012-04-24 20:35 2178视图提供在JQuery中使用模板的一致接口。 当模板 ... -
JavaScriptMVC之Controller
2012-04-24 20:08 1715Controller帮助创建合理的,可释放内存,快速执行jQu ... -
JavaScriptMVC之控制器监听事件
2012-04-23 21:16 1585控制器安装和卸载事件句柄非常容易。卸载事件句柄对于防止内存泄漏 ... -
JavaScriptMVC之Class
2012-04-23 20:50 1278Class提供相当继承的功能。使用Class就可以让我们结合面 ... -
JavaScriptMVC之Fixture续
2012-04-22 00:54 1198其实下面我写的主要并 ... -
JavaScriptMVC之数据绑定(jquery.tie)
2012-04-20 23:14 1688如果开发过Java的RCP程序的同学就会知道数据绑定datab ... -
JavaScriptMVC之Fixture
2012-04-20 22:19 1387注:阅读这篇同学必须 ... -
从JavaScriptMVC开始如何完成项目之压缩文件和生成帮助文档
2012-04-13 23:45 14891、压缩文件 在厨师手 ... -
从JavaScriptMVC开始如何完成项目之创建测试程序
2012-04-13 21:56 1025JavaScriptMVC放一个极大强调的重点在测试方面。Ja ... -
从JavaScriptMVC开始如何完成项目之创建应用程序
2012-04-12 23:56 1182如何使用JavaScriptMVC开发项目第一步,就是创建应用 ... -
JavascriptMVC 之 route 的 history功能的使用
2012-04-08 11:10 1658JavascriptMVC 之 route 的 his ... -
wijmo+javascriptmvc开发注意事项
2012-04-07 09:31 1317下面是在使用wijmo+javasc ... -
javascriptmvc之funcunit
2012-03-30 00:19 993javascriptmvc之funcunit funcu ... -
学习jquery mvc第一天,hello
2012-03-29 23:09 2210学习jquery mvc第一天,hello 做为程序员,对于 ...
相关推荐
NULL 博文链接:https://lyndon-lin.iteye.com/blog/1556095
上传了一半的javascriptmvc3.0.5,这个是【下】
JavascriptMVC代码
javascriptmvc-3.2.4.zip
javascriptmvc-3.3.zip
javascript的mvc框架。类似于java的mvc框架
MVC框架 JavaScriptMVC ,JavaScriptMVC 是一个 JavaScript 的 MVC 框架,通过它可以简化项目的开发...
javascriptmvc3.0.5,文件大于20MB,分成两个卷
谈谈JavaScriptMVC模式共3页.pdf.zip
javaScriptMVC开源框架,是一个不错的前端界面MVC框架,是在jquery等开源项目的基础上建立的
javaScriptMVC开源框架,是一个不错的前端界面MVC框架,是在jquery等开源项目的基础上建立的 说明:此文件解压后和第一部分文件夹必须放到一起才能正确使用
NULL 博文链接:https://lyndon-lin.iteye.com/blog/1484876
可将应用分成数据层、UI层和控制层。Mithril 压缩后只有 3kb 左右。API 提供一个模板引擎,带 DOM diff 实现,支持路由和组合。 示例代码: //namespace var app = {}; //model app.PageList = ...
NULL 博文链接:https://lyndon-lin.iteye.com/blog/1485743
:选择JavaScriptMVC框架很难。一方面要考虑的因素非常多,另一方面这种框架也非常多,而要从中选择一个合适的,还真得费一番心思。本文对JavaScriptMVC框架Angular、Backbone、CanJS和Ember作了比较,供大家参考。...
JavaScriptMVC JavaSriptMVC 高级编程课程
内容索引:脚本资源,Ajax/JavaScript,JavaScriptMVC JavaScriptMVC 是一个功能强大的 JavaScript framework. 也是一个很棒的JavaScript测试框架,它同样能提高开发的速度。JavaScriptMVC应用了模型-视图-控制器架构...
javaScript MVC 相关资料和例子,希望对大家有帮助