- 浏览: 234705 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
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 1988JavaScriptMVC之实战 下面我们通过一个真实的项目 ... -
JavaScriptMVC之快速开发
2012-04-28 21:53 4451有些同学反映说,需要看太多的篇章才能明白如何使用JavaScr ... -
JavaScriptMVC之语言助手
2012-04-26 21:00 1499在这篇文章,我只挑 ... -
JavaScriptMVC之专用事件
2012-04-26 20:32 1583JavaScriptMVC提供了一串很 ... -
JavaScriptMVC之Model
2012-04-25 22:52 2060Model顶层负责程序的数据层,使用它可以很容易做以下操作: ... -
JavaScriptMVC之View
2012-04-24 20:35 2235视图提供在JQuery中使用模板的一致接口。 当模板 ... -
JavaScriptMVC之Controller
2012-04-24 20:08 1792Controller帮助创建合理的,可释放内存,快速执行jQu ... -
JavaScriptMVC之控制器监听事件
2012-04-23 21:16 1628控制器安装和卸载事件句柄非常容易。卸载事件句柄对于防止内存泄漏 ... -
JavaScriptMVC之Class
2012-04-23 20:50 1347Class提供相当继承的功能。使用Class就可以让我们结合面 ... -
JavaScriptMVC之Fixture续
2012-04-22 00:54 1254其实下面我写的主要并 ... -
JavaScriptMVC之数据绑定(jquery.tie)
2012-04-20 23:14 1737如果开发过Java的RCP程序的同学就会知道数据绑定datab ... -
JavaScriptMVC之Fixture
2012-04-20 22:19 1471注:阅读这篇同学必须 ... -
从JavaScriptMVC开始如何完成项目之压缩文件和生成帮助文档
2012-04-13 23:45 15541、压缩文件 在厨师手 ... -
从JavaScriptMVC开始如何完成项目之创建测试程序
2012-04-13 21:56 1069JavaScriptMVC放一个极大强调的重点在测试方面。Ja ... -
从JavaScriptMVC开始如何完成项目之创建应用程序
2012-04-12 23:56 1234如何使用JavaScriptMVC开发项目第一步,就是创建应用 ... -
JavascriptMVC 之 route 的 history功能的使用
2012-04-08 11:10 1699JavascriptMVC 之 route 的 his ... -
wijmo+javascriptmvc开发注意事项
2012-04-07 09:31 1346下面是在使用wijmo+javasc ... -
javascriptmvc之funcunit
2012-03-30 00:19 1044javascriptmvc之funcunit funcu ... -
学习jquery mvc第一天,hello
2012-03-29 23:09 2267学习jquery mvc第一天,hello 做为程序员,对于 ...
相关推荐
Controller作为Model和View之间的桥梁,接收用户的输入,调用Model进行数据处理,并通知View更新显示。 **Model** 在JavaScriptMVC中,Model类通常用于封装和管理数据。它提供了数据验证、事件触发等功能,确保数据...
4. **Model**: JavaScriptMVC的模型层负责数据的管理和状态控制。在这个版本中,模型可能增强了数据同步和验证功能,使得与服务器的数据交互更加安全和可靠。 5. **Controller**: 控制器处理用户输入并协调视图和...
7. **CanJS**: 是JavaScriptMVC中的核心库,提供了MVC结构的实现,包括数据绑定、依赖注入和事件处理等功能。 **应用场景** JavaScriptMVC适用于构建复杂、数据驱动的Web应用,如内容管理系统、电子商务平台等。...
1. **模型(Model)**:模型层是应用的核心,负责处理数据和业务逻辑。在JavaScriptMVC中,模型类通过观察者模式与视图进行通信,当数据发生变化时,会自动通知视图更新。 2. **视图(View)**:视图负责展示数据,...
这篇博客文章“从JavaScriptMVC开始如何完成项目之创建应用程序”可能是指导开发者如何使用特定的JavaScript MVC框架或库来构建一个完整的应用程序。 在JavaScript MVC中: 1. **模型(Model)**:负责处理和管理...
它们处理数据的验证、存储和检索。模型的变化会触发视图的更新,确保用户界面始终反映出最新的数据状态。 **视图(View)** 视图是用户与应用程序交互的界面部分,通常由HTML、CSS和JavaScript组成。视图负责显示...
在“从JavaScriptMVC开始如何完成项目之压缩文件和生成帮助文档”这个主题中,我们将探讨如何利用该框架进行项目开发,特别是涉及到的压缩文件处理和生成帮助文档这两个关键环节。 一、压缩文件 在项目开发中,压缩...
在这个架构中,Model负责数据处理,View负责用户界面展示,而Controller作为两者之间的桥梁,处理用户交互并更新模型或视图。 在JavaScript MVC框架中,常见的有AngularJS、Ember.js、Backbone.js等。这些框架提供...
模型层是应用程序的核心,负责处理数据和业务逻辑。在JavaScript MVC中,Model通常用来存储和操作后端服务器返回的数据。当数据发生变化时,Model会触发事件通知其他组件,保持数据的一致性。例如,一个用户列表...
在JavaScriptMVC中,模型处理数据和业务逻辑,视图负责展示数据,而控制器则协调模型和视图之间的交互。 2. **jQuery和JavaScriptMVC的关系** JavaScriptMVC基于jQuery库,利用jQuery的强大DOM操作和事件处理能力...
模型处理数据和业务逻辑,视图负责用户界面的展示,而控制器协调模型和视图之间的交互。 2. **JavaScript MVC框架**:介绍一些流行的JavaScript MVC框架,如AngularJS、Ember.js、Backbone.js等,它们是如何实现MVC...
首先,MVC模式是软件工程中的一个经典设计模式,它将应用分为三个主要部分:Model(模型)负责处理数据和业务逻辑,View(视图)负责展示数据,而Controller(控制器)作为两者之间的桥梁,处理用户交互并更新模型或...
这些框架实现了MVC,使得在一个单页面中实现根据需要变化视图时更加轻松,而模型-视图-控制器(mvc)的核心概念就是:处理传入请求的控制器、显示信息的视图、表示业务规则和数据访问的模型。因此,当需要创建这样一...
揭开MVC的神秘面纱,教你如何设计合理的架构以及处理应用内部模块之间的依赖 介绍模板引擎和数据绑定 讲解远程数据加载、第二代Ajax以及跨域请求 利用WebSockets和Node构建实时应用 拖拽上传文件以及上传进度...
它管理应用程序的数据状态,处理CRUD操作,响应数据查询,并对数据进行验证。在JavaScript应用程序中,模型可以使用JSON来表示数据,并使用AJAX来存取数据。现在很多JavaScript库像Dojo、ExtJS都有专门的Data包,...
, 揭开MVC的神秘面纱,教你如何设计合理的架构以及处理应用内部模块之间的依赖, 介绍模板引擎和数据绑定, 讲解远程数据加载、第二代Ajax以及跨域请求, 利用WebSockets和Node构建实时应用, 拖拽上传文件以及上传进度...
- **Backbone.js**:非常流行的MVC库之一,提供了一个强大的数据绑定系统以及丰富的视图管理机制。 - **Spine.js**:一个简单易用的MVC框架,特别适合小型项目。 - **Sammy.js**:专注于单页面应用的轻量级MVC框架,...
3. **JavaScriptMVC**:JavaScriptMVC是一个完整的MVC框架,包含Model、View、Controller、ORM、测试工具等,旨在提高开发效率和代码质量。 4. **Qooxdoo**:Qooxdoo是一个全方位的JavaScript开发框架,提供编译器...
具有数据绑定,MVW,MVVM,MVC,依赖注入的声明式模板和出色的可测试性都是用纯客户端JavaScript来实现的!AngularJS是一个创建富客户端应用的JavaScriptMVC框架,它组织良好,经过严格测试,多功能,强大并且十分灵活。你...