`
hnhnhnhnhn
  • 浏览: 77067 次
社区版块
存档分类
最新评论

ExtJS4学习笔记九--数据模型的使用

阅读更多
1、创建Ext.data.Model数据实体模型
//注册用户数据模型User
Ext.regModel('User', {
    fields: [//定义模型字段
        {name: 'name',  type: 'string'},
        {name: 'age',   type: 'int'},
        {name: 'phone', type: 'string'}
    ]
});
//创建User模型的实体对象
var user = Ext.ModelMgr.create({
    name : 'tom',
    age  : 24,
    phone: '555-555-5555'
}, 'User');
//获取员工姓名
alert(user.get('name'));


2、在模型中进行数据验证
//定义默认的验证提示信息
Ext.data.validations.presenceMessage = '必须是有效值。';
Ext.data.validations.lengthMessage = '长度错误。';
Ext.data.validations.formatMessage = '格式错误。';
Ext.data.validations.inclusionMessage = '没有包括在可接受的数据中。';
Ext.data.validations.exclusionMessage = '不是可接受的值。';

//自定义数值范围验证
Ext.apply(Ext.data.validations,{
	number : function(config, value){
		if (value === undefined) {
            return false;
        }
        var min    = config.min,
            max    = config.max;
    
        if ((min && value < min) || (max && value > max)) {
            return false;
        } else {
            return true;
        }
	},
	numberMessage : '数值范围错误。'
});

//注册用户数据模型User
Ext.regModel('User', {
    fields: [//定义模型字段
         {name: 'name',     type: 'string'},
         {name: 'age',      type: 'int'},
         {name: 'phone',    type: 'string'},
         {name: 'gender',   type: 'string'},
         {name: 'username', type: 'string'},
         {name: 'alive',    type: 'boolean', defaultValue: true}
    ],
    validations: [
        {type: 'presence',  field: 'age'},
        {type: 'number',  field: 'age', min : 30},
        {type: 'length',    field: 'name', min: 2},
        {type: 'inclusion', field: 'gender',   list: ['男', '女']},
        {type: 'exclusion', field: 'username', list: ['admin@xx.xx', 'user@xx.xx']},
        {type: 'format',    field: 'username',
        	//校验用户名是否为电子邮件格式
        	matcher: /^([\w]+)(.[\w]+)*@([\w-]+\.){1,5}([A-Za-z]){2,4}$/
        }
    ]
});
//创建User模型的实体对象
var user = Ext.ModelMgr.create({
    name : 'tom',
    age  : 24,
    gender : 'man',
    username: 'abc'
}, 'User');
//执行数据验证
var errors = user.validate();
//获取验证信息
var message = [];
errors.each(function(v){
	message.push(v.field+' : '+v.message)
});
alert(message.join('\n'));


3、在模型中通过代理加载数据
//注册用户数据模型User
Ext.regModel('User', {
    fields: [//定义模型字段
            {name: 'name', type: 'string'},
            {name: 'age', type: 'int'},
            {name: 'id', type: 'int'}
    ],
    //配置数据代理
    proxy: {
    	type : 'ajax',
        url : 'userServer.jsp'
    }
});
var user = Ext.ModelManager.getModel('User');
//通过代理读取数据
user.load(1, {
    success: function(rec) {
    	alert(rec.get('name'));
    }
});
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="java.util.*" %>
<%
String userId = request.getParameter("id");
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write("{id : "+userId+", name: 'user"+userId+"'}");
%>


4、模型间的一对多关系
//注册用户数据模型User
Ext.regModel('User', {
    fields: [//定义模型字段
            {name: 'name', type: 'string'},//用户名称
            {name: 'id', type: 'int'}//用户id
    ],
    //User与Product是一对多关系
    hasMany: {model: 'Product', name:'getProducts',autoLoad : false},
    proxy: {
    	type : 'ajax', 
        url : 'userServer.jsp'
    }
});
//注册产品数据模型Product
Ext.regModel('Product', {
    fields: [//定义模型字段
            {name: 'id', type: 'int'},//产品id
            {name: 'title', type: 'string'},//产品名称
            {name: 'user_id', type: 'int'}//用户id
    ],
    proxy: {
    	type : 'ajax',
        url : 'ProductServer1.jsp',
	    reader: {
            type: 'json',
            root: 'products'
        }
    }
});
//创建User实例
var user = Ext.ModelManager.getModel('User');
//读取id为1的User实例
user.load(1, {
    success: function(rec) {
    	//获取user_id为1的产品Store
    	var products = rec.getProducts();
    	//加载user_id为1的产品数据
    	products.load({
    		callback : function(records, operation, success){
    			var msg = [];
    			for(var i = 0; i < records.length; i++){
    				var rec = records[i];
    				msg.push('产品名称:'+rec.get('title')+' 用户id:'+rec.get('user_id'));
    			}
    			alert(msg.join('\n'));
    		}
    	});
    }
});
ProductServer1.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="net.sf.json.JSONObject" %>
<%@ page import="net.sf.json.JSONArray" %>
<%
String filter = request.getParameter("filter");
JSONArray filters = JSONArray.fromObject(filter);
int userId = filters.getJSONObject(0).getInt("value");
response.setContentType("application/json;charset=UTF-8");
String result = "{products:[{id : 1, title: '产品1', user_id : "+userId+"}, {id : 2, title: '产品2', user_id : "+userId+"}]}";
System.out.println("result="+result);
response.getWriter().write(result);
%>


5、模型间的多对一关系
//注册分类数据模型Category
Ext.regModel('Category', {
    fields: [//定义模型字段
            {name: 'type', type: 'string'},//产品类型名称
            {name: 'id', type: 'int'}//产品类型id
    ],
    proxy: {
    	type : 'ajax', 
        url : 'CategoryServer.jsp'
    }
});
//注册产品数据模型Product
Ext.regModel('Product', {
    fields: [//定义模型字段
            {name: 'id', type: 'int'},//产品id
            {name: 'title', type: 'string'},//产品名称
            {name: 'category_id', type: 'int'}//用户id
    ],
    belongsTo : 'Category'
});
//创建product实例
var product = new Product({
    id: 100,
    category_id: 1,
    title: '产品1'
});
product.getCategory(function(category, operation){
	//获取类型名称
	alert(category.get('type'));
});
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%
String categoryId = request.getParameter("id");
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write("{id : "+categoryId+", type: '产品类型"+categoryId+"'}");
%>


6、Ext.data.proxy.Memory示例
//创建数据模型
Ext.regModel('User', {
    fields: ['id','name','age']
});

//定义内存数据变量
var userData = {
    users : [
        { id: 1, name: '张三', age: 20 },
        { id: 2, name: '李四', age: 30 },
        { id: 3, name: '王五', age: 40 }
    ]
};	

//创建memory代理
var memoryProxy = new Ext.data.proxy.Memory({
	model : 'User',
	reader: {
        root: 'users'
    },
	data : userData
}); 		

//读取数据
memoryProxy.read(new Ext.data.Operation(), callBack)
//数据读取之后的回调函数
function callBack(result){ 		//load方法的回调函数
	var totalRecords = result.resultSet.total;
	alert('读取内存数据,记录总是:'+totalRecords);
}


7、Ext.data.proxy.Ajax示例
//创建数据模型
Ext.regModel('Person', {
    fields: ['name','age']
});
//创建Ajax代理
var ajaxProxy = new Ext.data.proxy.Ajax({
	url : 'personServer.jsp',
	model: 'Person',
    reader: 'json'
});
//创建请求参数对象
var operation = new Ext.data.Operation({
    action: 'read'//设置请求动作为read
});
//读取数据
ajaxProxy.doRequest(operation,callBack);
//doRequest方法的回调函数
function callBack(operation){
	//获取原始响应数据
	var responseText = operation.response.responseText;
	//获得记录总数
	var totalRecords = operation.resultSet.totalRecords;
	//获得记录数组
	var records = operation.resultSet.records;
	
	alert('使用Ajax代理读取远程数据,记录总是:'+totalRecords);
}
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%
	response.setContentType("application/json;charset=UTF-8");
	String result = "[{name: '张三', age : 20}, {name: '李四', age : 30}]";
	response.getWriter().write(result);
%>


8、Ext.data.reader.Json示例
//JSON格式的用户及订单信息
var userData = {
	"total" : 2000,
	"users": [{
		"id": 123,
		"name": "张三",
		"orders": [{
			"id": 50,
			"total" : 100
		}]
	}]
}
//定义用户User模型
Ext.regModel("User", {
    fields: [ 'id', 'name' ],
    hasMany: 'Order'//定义User与Order之间的一对多关系
});
//定义订单Order模型
Ext.regModel("Order", {
    fields: [ 'id', 'total' ],
    belongsTo: 'User'//定义Order与User之间的多对一关系
});

//创建memory代理
var memoryProxy = new Ext.data.proxy.Memory({
	model : 'User',
	reader: {
        type: 'json',//Ext.data.reader.Json读取器
        root: 'users'
    },
	data : userData
}); 
//读取数据
memoryProxy.read(new Ext.data.Operation(), callBack)
//数据读取之后的回调函数
function callBack(result){
	//获取总记录数
	var count = result.resultSet.total;
	//获取第一个用户信息
	var user = result.resultSet.records[0];
	//获取该用户的第一个账单信息
	var order = user.orders().getAt(0);
	alert('总记录数:'+count+
		  '\n姓名:'+user.get('name')+
		  '\n账单金额:'+order.get('total'));
}


9、读取复杂的JSON数据
//JSON格式的用户及订单信息
var userData = {
	"users": [{
		"searchDate" : "2011-04-24",//查询时间
		"role" : "admin",//查询人角色
		"info" : {
			"id": 123,
			"name": "张三"
		}
	}]
}
//定义用户User模型
Ext.regModel("User", {
    fields: [ 'id', 'name' ]
});

//创建memory代理
var memoryProxy = new Ext.data.proxy.Memory({
	model : 'User',
	reader: {
        type: 'json',//Ext.data.reader.Json读取器
        root: 'users',
        record : 'info'//定位有效数据的位置
    },
	data : userData
}); 
//读取数据
memoryProxy.read(new Ext.data.Operation(), callBack)
//数据读取之后的回调函数
function callBack(result){
	//获取第一个用户信息
	var user = result.resultSet.records[0];
	alert('姓名:'+user.get('name'));
}


10、Ext.data.Store示例
//定义用户User模型
Ext.regModel("User", {
    fields: ['name', 'age' ],
    proxy: {
        type: 'memory'
    }
});
//创建数据集对象
var myStore = new Ext.data.Store({
	autoLoad: true,
	data : [{name: '张三', age : 20}, 
            {name: '李四', age : 30}],
    model: 'User'
});
//遍历Store中的记录
var msg = ['遍历Store中的记录:'];
myStore.each(function(rec){
	msg.push('姓名:'+rec.get('name')+' 年龄:'+rec.get('age'));
});
alert(msg.join('\n'));


11、Ext.data.ArrayStore示例
//定义用户User模型
Ext.regModel("User", {
    fields: ['name', 'age' ],
    proxy: 'memory'
});
//创建ArrayStore数据集对象
var myStore = new Ext.data.ArrayStore({
	autoLoad: true,
	data : [['张三',20],['李四',30]],//数组数据
    model: 'User'
});
//遍历Store中的记录
var msg = ['遍历ArrayStore中的记录:'];
myStore.each(function(rec){
	msg.push('姓名:'+rec.get('name')+' 年龄:'+rec.get('age'));
});
alert(msg.join('\n'));
分享到:
评论
2 楼 endual 2012-08-24  
  
请问博主,
我是用mvc的,请问form.panel怎么绑定model,
你都是创建一个对象,然后调用方法就进行加载数据的。。。
1 楼 365353650 2012-07-18  
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="net.sf.json.JSONObject" %>
<%@ page import="net.sf.json.JSONArray" %>
<%
String filter = request.getParameter("filter");
JSONArray filters = JSONArray.fromObject(filter);
int userId = filters.getJSONObject(0).getInt("value");
response.setContentType("application/json;charset=UTF-8");
String result = "{products:[{id : 1, title: '产品1', user_id : "+userId+"}, {id : 2, title: '产品2', user_id : "+userId+"}]}";
System.out.println("result="+result);
response.getWriter().write(result);
%>

相关推荐

    Extjs学习笔记之九 数据模型(上)

    ### Extjs 学习笔记之九:数据模型(上) #### 概述 本文将深入探讨Extjs框架中至关重要的组成部分——数据模型。数据模型在Extjs中扮演着核心角色,它不仅为开发者提供了强大的数据处理能力,还极大地简化了前端与...

    ExtJS笔记---Grid实现后台分页

    - `model`:指定数据模型,定义字段和数据类型。 2. **使用Paging Toolbar**: - Grid通常配合Paging Toolbar使用,它会显示页码和页大小选择器。通过将Paging Toolbar添加到Grid下方,可以方便用户导航和控制...

    ExtJS4学习笔记十一 树控件的使用

    在本篇《ExtJS4学习笔记十一:树控件的使用》中,我们将深入探讨ExtJS框架中的树形控件(TreePanel),这是一种强大的UI组件,用于展示层次结构的数据。ExtJS4对树控件的功能进行了增强,使其更加灵活且易于使用。...

    界面框架extjs学习笔记

    EXTJS in Action 是一本专为学习EXTJS编写的书籍,但这里我们主要关注学习笔记中的关键知识点。 首先,EXTJS的目录结构非常重要,因为它包含了所有必要的资源和源码: 1. `adapter`:这部分包含了适配器,用于将...

    extjs 学习心得笔记

    在探讨《ExtJS学习心得笔记》这一主题时,我们不仅会深入理解ExtJS框架的核心概念与实践技巧,还会从新手的角度出发,提炼出一系列有助于快速上手的学习策略,避免常见的学习陷阱,确保学习过程高效而有成效。...

    关于ExtJS3.3版本学习笔记

    "动态Model"可能指的是ExtJS中的数据模型如何响应数据变化和更新。"Never Stop Dreaming"可能是作者对编程的热情表达,或者是该教程的主题。 2. "EXTJS4 desktop问题 - Ext3_x求助讨论 - 中国最大的ExtJs讨论社区 ...

    extJs+2.1学习笔记.pdf

    本学习笔记将深入探讨ExtJS 2.1的关键概念和技术,帮助读者掌握这个框架的核心要素。 1. **ExtJs 结构树** 在ExtJS中,应用程序通常基于组件树构建,每个组件都有自己的属性、方法和事件。理解这种结构对于布局...

    extjs 的一些学习笔记

    【ExtJS 学习笔记概览】 ExtJS 是一个强大的JavaScript 框架,主要用于构建富客户端的Web应用程序。它的核心特性包括丰富的组件库、强大的数据包管理、灵活的布局系统以及面向对象的编程模型。以下是对ExtJS 入门...

    extjs4.0学习笔记

    10. **数据模型(Ext.data.Model)**:定义数据模型,`fields`定义了数据结构,`idProperty`指定主键字段,`Ext.data.Field`用于定义字段的属性,如`name`, `type`, `defaultValue` 和 `mapping`。 11. **数据源(Ext....

    JavaScript.-Extjs基础学习笔记

    最后,`GridPanel`对象被创建,指定了渲染目标、数据源、列模型、选择模型等属性。 ### 总结 Extjs的Tab Panel和Grid组件提供了丰富的特性和自定义选项,使得开发者能够构建出既美观又功能强大的用户界面。通过...

    Extjs3.4+Ext-core.pdf+轻松搞定Extjs.pdf

    本资源包包含了与ExtJS 3.4相关的学习资料,包括`Ext-core.pdf`、`轻松搞定Extjs.pdf`以及`Extjs学习笔记.docx`,旨在帮助初学者或有经验的开发者更好地理解和掌握ExtJS 3.4。 `Ext-core.pdf` 是关于Ext Core的文档...

    Extjs4 MVC开发笔记源码

    在ExtJS 4中,`Ext.data.Model`是数据模型的基础。开发者可以定义模型类,包含字段(fields)和验证规则。模型类通常与服务器端的API接口对应,通过Store进行数据的加载和同步。 2. 视图(View) 视图由`Ext....

    Extjs复习笔记(二十)-- tree和grid结合

    这可能涉及到事件监听和数据模型的更新。 在EXTJS中,源码阅读和理解是提升技能的关键。通过阅读EXTJS库中的源码,我们可以更深入地了解这些组件的工作原理,从而更好地定制和优化我们的应用。工具如调试器和代码...

    老师整理的extjs学习笔记

    ### ExtJS 学习笔记概览 #### 一、ExtJS 入门 **1.1 ExtJS 构成及如何引用** ExtJS 是一款基于 JavaScript 的开源框架,专为 Web 应用程序的前端界面设计。其核心优势在于提供了一套丰富的 UI 组件和强大的数据...

    Extjs学习笔记有用

    以上内容只是ExtJS框架中的一部分,实际上ExtJS还包括组件体系(如Grids、Forms、Trees等)、数据模型和Store、布局系统、Ajax通信、主题定制等多个方面。学习ExtJS可以帮助开发者快速构建功能丰富的、交互性强的Web...

    ExtJs + api + 笔记 + 完整包

    例如,你可以从中学习到如何创建和配置组件,如何处理数据模型和store,以及如何使用事件监听机制来实现组件间的交互。 "24-Ext中的布局.doc"文件介绍了ExtJs中的布局管理器。在ExtJs中,布局管理器负责决定组件在...

Global site tag (gtag.js) - Google Analytics