`

Sencha Touch 2 快速入门系列(六)-- 数据(Data)

阅读更多

 

Sencha Touch 2 快速入门系列(六)-- 数据(Data)

分类: Sencha Touch 351人阅读 评论(0) 收藏 举报

 

本文已添加至Sencha Touch 2快速入门系列索引:http://blog.csdn.net/ardy_c/article/details/7544470

转载请注明出处:http://blog.csdn.net/ardy_c/article/details/7631641

 

 

在开发一个应用的时候,很多情况下前端页面需要与后台进行数据交互,包括数据的读取和持久化。Sencha Touch 2 为我们提供了一个data package来实现数据交互的功能。而这个data package的运作,是通过以下三个模块相互支撑的:Model、Store、Proxy。

 

Model

Model(Ext.data.Model),就是一个数据模型。它所表现的就是你的应用所关心的一个数据实体模型。说白一些,就是你的应用所需要的数据实体包含哪些字段,每个字段是什么类型。Model 就是负责诠释这些东西,是一个字段信息的集。当然,它的功能不止这些,后面我们会详细介绍。先看看以下一段示例代码:

 

[javascript] view plaincopy
  1. Ext.define('User', {  
  2.     extend: 'Ext.data.Model',  
  3.     config: {  
  4.         fields: [  
  5.             { name: 'id', type: 'int' },  
  6.             { name: 'name', type: 'string' }  
  7.         ]  
  8.     }  
  9. });  
以上代码,通过扩展Model定义了一个叫User的Model。通过向config属性传入名叫fields的数据对象,设置好当该model实例化时,自动定义model的fields属性。而fields属性的作用,就是定议该model含有哪些字段,分别是什么类型的。

 

 

Store

Store(Ext.data.Store),如果model是字段的集合,那些Store正好与之相对应,是数据记录的集合,每条记录都存在着与model相对应的字段值。另外,它还能对数据进行排序、过滤、组合等操作。

[javascript] view plaincopy
  1. Ext.create('Ext.data.Store', {  
  2.     model: 'User',  
  3.     data: [  
  4.        { id: 1, name: 'Ed' },  
  5.        { id: 2, name: 'Tommy' }  
  6.     ]});  
在上面代码中,我们创建了一个Store。由此看出,Store是基于Model的记录集合。data属性内是一个对象数组。每个对象数组元素正是一条记录。每个元素中,各个属性正好与User Model定义的属性相对应。

 

 

Proxy

Proxy,一般为Store所用,用于处理数据的加载和持久化。其中,Proxy有两种类型:客户端和服务端。客户端是指基于浏览器内存的数据读取和存储,或者当HTML5的Local Storage属性可用时,我们可以进行基本客户端本地的数据读取和存储;服务端,相信大家也比较熟悉,包含有Ajax、JsonP和Rest。我们来看看一个Proxy的使用实例:

 

[javascript] view plaincopy
  1. Ext.define('User', {  
  2.   
  3.     extend: 'Ext.data.Model',  
  4.   
  5.     config: {  
  6.         fields: ['id''name''age''gender'],  
  7.         proxy: {  
  8.             type: 'rest',  
  9.             url : 'data/users',  
  10.             reader: {  
  11.                 type: 'json',  
  12.                 root: 'users'  
  13.             }  
  14.         }  
  15.     }  
  16. });  
  17.   
  18. // 使用model中定义的proxy  
  19. Ext.create('Ext.data.Store', {  
  20.     model: 'User'  
  21. });  

Proxy一般为Store所用,但也可以在Model中进行定义。当Proxy定义于Model中,在创建Store的时候,store自动与在model中定义的proxy进行关联。在Model上定义Proxy有两个好处:1,Model可能会被多个Store引用到,在Model上定义了Proxy,就不用在Store上重复定义了;2,可能绕开Store,直接在Model上加载和存储数据。在上面代码建立了一个rest方式的proxy(type: 'rest')。url是rest资源的地址。由于请求响应返回的时json格式结果,所以我们设定了一个json reader去对结果进行解析,以结果中的users结果作为根开始读取响应信息。我们再来看一个例子:

 

[javascript] view plaincopy
  1. var User = Ext.ModelMgr.getModel('User');  
  2.   
  3. var ed = Ext.create('User', {  
  4.     name: 'Ed Spencer',  
  5.     age : 25  
  6. });  
  7.   
  8. ed.save({  
  9.     success: function(ed) {  
  10.         console.log("Saved Ed! His ID is "+ ed.getId());  
  11.     }  
  12. });  
  13.   
  14. User.load(1, {  
  15.     success: function(user) {  
  16.         console.log("Loaded user 1: " + user.get('name'));  
  17.     }  
  18. });  
以上代码需要与上一段代码一起使用。通过Model存取数据,无需建立store。当ed调用save方法时,会通过之前设置好的rest代理post到data/users中去进行处理;而调用load方法时,会通过rest代理通过get方法向data/users/1 请求User 1的数据。

 

 

验证(Validation)

在日常的表单处理中,数值的验证是非常频繁使用的操作。Sencha Touch 2 为大家提供了一些方便的验证方法,只需要在Model中加入一些验证逻辑,即可实现对输入数据的验证。我们来看看一面一段代码:

 

[javascript] view plaincopy
  1. Ext.define('User', {  
  2.     extend: 'Ext.data.Model',  
  3.   
  4.     config: {  
  5.         fields: ...,  
  6.   
  7.         validations: [  
  8.             { type: 'presence',  field: 'name' },  
  9.             { type: 'length',    field: 'name', min: 5 },  
  10.             { type: 'format',    field: 'age', matcher: /\d+/ },  
  11.             { type: 'inclusion', field: 'gender', list: ['male''female'] },  
  12.             { type: 'exclusion', field: 'name', list: ['admin'] }  
  13.         ],  
  14.   
  15.         proxy: ...  
  16.     }  
  17. });  
以上代码是在Model中加入了一个validations的属性,值是一个数据对象的数组。每一个数据对象里的数据用于配置某一字段的验证逻辑。其中,field是指关联哪个字段,type是指使用哪种验证逻辑。每个字段可以绑定多种验证逻辑,例如上面代码name字段就绑定了presence、length和exclusion三种方式。具体这些是代表怎样的逻辑,下面给大家介绍一下:

 

 

  • presence:简单验证该字段是否存在数值,数字0是合法数值,空字符串是非法。
  • length:验证字符串长度,是否大于、是否小于或是否在最大值和最小值之间,最大、最小值都是可选的。
  • format:验证字符串是否符合设定的正则表达式。
  • inclusion:验证字符串是否为指定的值的其中之一,是则通过验证。
  • exclusion:验证字符串是否为指定的值的其中之一,否则通过验证。

 

现在我们来验证一下上面的代码所添加的验证功能是否可以正常工作。

 

[javascript] view plaincopy
  1. // 新建一个User实例,我们特意违返验证规则  
  2. var newUser = Ext.create('User', {  
  3.     name: 'admin',  
  4.     age: 'twenty-nine',  
  5.     gender: 'not a valid gender'  
  6. });  
  7.   
  8. // 执行验证  
  9. var errors = newUser.validate();  
  10.   
  11. console.log('Is User valid?', errors.isValid()); // 存在错误信息,返回 false  
  12. console.log('All Errors:', errors.items); // 返回这个实例中产生的错误的数组  
  13.   
  14. console.log('Age Errors:', errors.getByField('age')); // 返回该字段中产生的错误信息  

上面代码中,在新建一个User实例后,执行了validate()的方法。执行这个方法,程序才会对实例中的各个字段,根据配置的验证方法进行验证,然后返回一个包含验证错误信息和一些方法(例如isValid()、getByField())的对象。我们可以通过调用这些方法来获取我们需要的信息。
分享到:
评论

相关推荐

    sencha touch2学习笔记(一)---环境搭建和开发工具配置

    Sencha Touch 2 是一款专为移动设备设计的前端框架,用于构建高性能的跨平台触控应用。在本文中,我们将深入探讨如何进行Sencha Touch 2的学习,从环境搭建到开发工具的配置,帮助你开启移动应用开发之旅。 首先,...

    《SenchaTouch权威指南》源代码-

    1.第一章至第十四章下各子文件夹,以及第十五章的15-1、15-2、15-3子文件夹中均包含开发阶段使用的index-debug.html页面文件(使用sencha-touch-debug.js核心脚本文件)与app.js脚本文件(开发阶段使用,未经过压缩...

    sencha touch2 ajax 获取数据

    Sencha Touch2是一个用于构建高性能、跨平台的移动应用的JavaScript库,它专注于触摸设备上的用户体验,提供了一系列丰富的UI组件和工具,使得开发者能够快速地创建出美观且功能强大的移动应用。 ### Sencha Touch2...

    touch-docs-2.2.1.zip(senchaTouch 离线API参考文档)

    3. **快速入门指南**:针对初学者的教程,引导他们快速上手Sencha Touch的开发环境和基本操作。 4. **用户手册**:全面介绍Sencha Touch的架构、工作原理以及最佳实践。 将这个文档部署到Tomcat的webAPP目录下,...

    Sencha Touch 2入门教程之MVC例子程序源代码

    总结来说,"Sencha Touch 2入门教程之MVC例子程序源代码"是一个帮助开发者了解如何在移动应用中利用MVC模式进行有效组织和管理的示例。通过这个登录界面例子,我们可以学习到如何定义模型、创建视图、设置控制器以及...

    Sencha Touch-2.4.2

    1. 框架的核心库文件,如sencha-touch.js和sencha-touch.css,开发者可以直接在项目中引用。 2. 示例代码和模板,用于快速启动新项目或者理解如何使用特定组件。 3. 文档和API参考,帮助开发者查阅和学习Sencha ...

    SenchaCmd-6.5.3-windows-64bit.zip

    Sencha Cmd是一款强大的命令行工具,专为Sencha框架(如Ext JS和Sencha Touch)的开发和构建过程提供便利。在"SenchaCmd-6.5.3-windows-64bit.zip"这个压缩包中,包含的是适用于Windows 64位系统的Sencha Cmd 6.5.3...

    Sencha Touch2环境搭建

    git clone https://github.com/sencha/Sencha-Touch.git ``` 2. **创建新项目** - 使用Sencha CMD创建一个新的Sencha Touch 2项目。在命令行中导航到Sencha CMD安装目录下的bin文件夹,然后运行: ``` sencha ...

    sencha-touch-grid

    sencha touch完整包(试用版)中的grid代码,位置在 touch-2.3.n > packages > sencha-touch-grid 使用时放到 ../MyApp/packages下 TouchGrid gives you a grid feature to arrange information in rows and columns...

    sencha-touch-2.1.1-gpl.zip

    3. **数据管理**:Sencha Touch 2.1.1提供了一个强大的数据包,支持本地存储和远程数据同步。它使用JSONP和Ajax技术与服务器通信,实现了模型-视图-控制器(MVC)架构,方便数据管理。 4. **手势支持**:框架内置了...

    SenchaSDKTools-2.0.0-Beta-windows

    SenchaSDKTools-2.0.0-Beta-windows

    sencha-touch-2.1.0-gpl.zip

    sencha-touch-2.1.0-gpl.zip 官网下载的,欢迎下载

    sencha-touch-2.3.1-gpl.zip

    sencha-touch-2.3.1-gpl.zip

    Hands-on Sencha Touch中文翻译第六章.pdf

    在阅读了《Hands-on Sencha Touch中文翻译第六章.pdf》文档的内容之后,可以提炼出以下知识点,主要涉及Sencha Touch框架以及使用Sencha Cmd命令行工具进行Sencha Touch应用的创建和管理。 ### Sencha Cmd命令行...

    sencha touch项目源码

    5. **触摸事件**:由于Sencha Touch面向移动设备,它提供了一系列触摸事件,如tap、swipe、doubletap等,以适应触屏操作。 现在,我们来看看`CityQingBao`这个项目的具体知识点: 1. **应用结构**:项目可能包含了...

    Sencha Touch2 MVC Demo (含源码/数据库)

    1. **Sencha Touch 2框架**:包含`sencha-touch.js`或`sencha-touch-debug.js`,这是运行Sencha Touch应用的基本文件,包含了所有核心类和功能。 2. **主题样式**:Sencha Touch 2支持多种视觉主题,如`touch/...

    SenchaCmd-4.0.5.87--windows.zip

    SenchaCmd-4.0.5.87--windows.exe.zip SenchaCmd-4.0.5.87--windows.zip

Global site tag (gtag.js) - Google Analytics