ExtJS4學習筆記九--數據模型的使用

1、創建Ext.data.Model數據實體模型 
Javascript代碼  收藏代碼
  1. //註冊用戶數據模型User  
  2. Ext.regModel('User', {  
  3.     fields: [//定義模型字段  
  4.         {name: 'name',  type: 'string'},  
  5.         {name: 'age',   type: 'int'},  
  6.         {name: 'phone', type: 'string'}  
  7.     ]  
  8. });  
  9. //創建User模型的實體對象  
  10. var user = Ext.ModelMgr.create({  
  11.     name : 'tom',  
  12.     age  : 24,  
  13.     phone: '555-555-5555'  
  14. }, 'User');  
  15. //獲取員工姓名  
  16. alert(user.get('name'));  


2、在模型中進行數據驗證 
Javascript代碼  收藏代碼
  1. //定義默認的驗證提示信息  
  2. Ext.data.validations.presenceMessage = '必須是有效值。';  
  3. Ext.data.validations.lengthMessage = '長度錯誤。';  
  4. Ext.data.validations.formatMessage = '格式錯誤。';  
  5. Ext.data.validations.inclusionMessage = '沒有包括在可接受的數據中。';  
  6. Ext.data.validations.exclusionMessage = '不是可接受的值。';  
  7.   
  8. //自定義數值範圍驗證  
  9. Ext.apply(Ext.data.validations,{  
  10.     number : function(config, value){  
  11.         if (value === undefined) {  
  12.             return false;  
  13.         }  
  14.         var min    = config.min,  
  15.             max    = config.max;  
  16.       
  17.         if ((min && value < min) || (max && value > max)) {  
  18.             return false;  
  19.         } else {  
  20.             return true;  
  21.         }  
  22.     },  
  23.     numberMessage : '數值範圍錯誤。'  
  24. });  
  25.   
  26. //註冊用戶數據模型User  
  27. Ext.regModel('User', {  
  28.     fields: [//定義模型字段  
  29.          {name: 'name',     type: 'string'},  
  30.          {name: 'age',      type: 'int'},  
  31.          {name: 'phone',    type: 'string'},  
  32.          {name: 'gender',   type: 'string'},  
  33.          {name: 'username', type: 'string'},  
  34.          {name: 'alive',    type: 'boolean', defaultValue: true}  
  35.     ],  
  36.     validations: [  
  37.         {type: 'presence',  field: 'age'},  
  38.         {type: 'number',  field: 'age', min : 30},  
  39.         {type: 'length',    field: 'name', min: 2},  
  40.         {type: 'inclusion', field: 'gender',   list: ['男''女']},  
  41.         {type: 'exclusion', field: 'username', list: ['[email protected]''[email protected]']},  
  42.         {type: 'format',    field: 'username',  
  43.             //校驗用戶名是否爲電子郵件格式  
  44.             matcher: /^([\w]+)(.[\w]+)*@([\w-]+\.){1,5}([A-Za-z]){2,4}$/  
  45.         }  
  46.     ]  
  47. });  
  48. //創建User模型的實體對象  
  49. var user = Ext.ModelMgr.create({  
  50.     name : 'tom',  
  51.     age  : 24,  
  52.     gender : 'man',  
  53.     username: 'abc'  
  54. }, 'User');  
  55. //執行數據驗證  
  56. var errors = user.validate();  
  57. //獲取驗證信息  
  58. var message = [];  
  59. errors.each(function(v){  
  60.     message.push(v.field+' : '+v.message)  
  61. });  
  62. alert(message.join('\n'));  


3、在模型中通過代理加載數據 
Javascript代碼  收藏代碼
  1. //註冊用戶數據模型User  
  2. Ext.regModel('User', {  
  3.     fields: [//定義模型字段  
  4.             {name: 'name', type: 'string'},  
  5.             {name: 'age', type: 'int'},  
  6.             {name: 'id', type: 'int'}  
  7.     ],  
  8.     //配置數據代理  
  9.     proxy: {  
  10.         type : 'ajax',  
  11.         url : 'userServer.jsp'  
  12.     }  
  13. });  
  14. var user = Ext.ModelManager.getModel('User');  
  15. //通過代理讀取數據  
  16. user.load(1, {  
  17.     success: function(rec) {  
  18.         alert(rec.get('name'));  
  19.     }  
  20. });  
Jsp代碼  收藏代碼
  1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>  
  2. <%@ page import="java.util.*" %>  
  3. <%  
  4. String userId = request.getParameter("id");  
  5. response.setContentType("application/json;charset=UTF-8");  
  6. response.getWriter().write("{id : "+userId+", name: 'user"+userId+"'}");  
  7. %>  


4、模型間的一對多關係 
Javascript代碼  收藏代碼
  1. //註冊用戶數據模型User  
  2. Ext.regModel('User', {  
  3.     fields: [//定義模型字段  
  4.             {name: 'name', type: 'string'},//用戶名稱  
  5.             {name: 'id', type: 'int'}//用戶id  
  6.     ],  
  7.     //User與Product是一對多關係  
  8.     hasMany: {model: 'Product', name:'getProducts',autoLoad : false},  
  9.     proxy: {  
  10.         type : 'ajax',   
  11.         url : 'userServer.jsp'  
  12.     }  
  13. });  
  14. //註冊產品數據模型Product  
  15. Ext.regModel('Product', {  
  16.     fields: [//定義模型字段  
  17.             {name: 'id', type: 'int'},//產品id  
  18.             {name: 'title', type: 'string'},//產品名稱  
  19.             {name: 'user_id', type: 'int'}//用戶id  
  20.     ],  
  21.     proxy: {  
  22.         type : 'ajax',  
  23.         url : 'ProductServer1.jsp',  
  24.         reader: {  
  25.             type: 'json',  
  26.             root: 'products'  
  27.         }  
  28.     }  
  29. });  
  30. //創建User實例  
  31. var user = Ext.ModelManager.getModel('User');  
  32. //讀取id爲1的User實例  
  33. user.load(1, {  
  34.     success: function(rec) {  
  35.         //獲取user_id爲1的產品Store  
  36.         var products = rec.getProducts();  
  37.         //加載user_id爲1的產品數據  
  38.         products.load({  
  39.             callback : function(records, operation, success){  
  40.                 var msg = [];  
  41.                 for(var i = 0; i < records.length; i++){  
  42.                     var rec = records[i];  
  43.                     msg.push('產品名稱:'+rec.get('title')+' 用戶id:'+rec.get('user_id'));  
  44.                 }  
  45.                 alert(msg.join('\n'));  
  46.             }  
  47.         });  
  48.     }  
  49. });  
ProductServer1.jsp
Jsp代碼  收藏代碼
  1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>  
  2. <%@ page import="net.sf.json.JSONObject" %>  
  3. <%@ page import="net.sf.json.JSONArray" %>  
  4. <%  
  5. String filter = request.getParameter("filter");  
  6. JSONArray filters = JSONArray.fromObject(filter);  
  7. int userId = filters.getJSONObject(0).getInt("value");  
  8. response.setContentType("application/json;charset=UTF-8");  
  9. String result = "{products:[{id : 1, title: '產品1', user_id : "+userId+"}, {id : 2, title: '產品2', user_id : "+userId+"}]}";  
  10. System.out.println("result="+result);  
  11. response.getWriter().write(result);  
  12. %>  


5、模型間的多對一關係 
Javascript代碼  收藏代碼
  1. //註冊分類數據模型Category  
  2. Ext.regModel('Category', {  
  3.     fields: [//定義模型字段  
  4.             {name: 'type', type: 'string'},//產品類型名稱  
  5.             {name: 'id', type: 'int'}//產品類型id  
  6.     ],  
  7.     proxy: {  
  8.         type : 'ajax',   
  9.         url : 'CategoryServer.jsp'  
  10.     }  
  11. });  
  12. //註冊產品數據模型Product  
  13. Ext.regModel('Product', {  
  14.     fields: [//定義模型字段  
  15.             {name: 'id', type: 'int'},//產品id  
  16.             {name: 'title', type: 'string'},//產品名稱  
  17.             {name: 'category_id', type: 'int'}//用戶id  
  18.     ],  
  19.     belongsTo : 'Category'  
  20. });  
  21. //創建product實例  
  22. var product = new Product({  
  23.     id: 100,  
  24.     category_id: 1,  
  25.     title: '產品1'  
  26. });  
  27. product.getCategory(function(category, operation){  
  28.     //獲取類型名稱  
  29.     alert(category.get('type'));  
  30. });  
Jsp代碼  收藏代碼
  1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>  
  2. <%  
  3. String categoryId = request.getParameter("id");  
  4. response.setContentType("application/json;charset=UTF-8");  
  5. response.getWriter().write("{id : "+categoryId+", type: '產品類型"+categoryId+"'}");  
  6. %>  


6、Ext.data.proxy.Memory示例 
Javascript代碼  收藏代碼
  1. //創建數據模型  
  2. Ext.regModel('User', {  
  3.     fields: ['id','name','age']  
  4. });  
  5.   
  6. //定義內存數據變量  
  7. var userData = {  
  8.     users : [  
  9.         { id: 1, name: '張三', age: 20 },  
  10.         { id: 2, name: '李四', age: 30 },  
  11.         { id: 3, name: '王五', age: 40 }  
  12.     ]  
  13. };    
  14.   
  15. //創建memory代理  
  16. var memoryProxy = new Ext.data.proxy.Memory({  
  17.     model : 'User',  
  18.     reader: {  
  19.         root: 'users'  
  20.     },  
  21.     data : userData  
  22. });           
  23.   
  24. //讀取數據  
  25. memoryProxy.read(new Ext.data.Operation(), callBack)  
  26. //數據讀取之後的回調函數  
  27. function callBack(result){      //load方法的回調函數  
  28.     var totalRecords = result.resultSet.total;  
  29.     alert('讀取內存數據,記錄總是:'+totalRecords);  
  30. }  


7、Ext.data.proxy.Ajax示例 
Javascript代碼  收藏代碼
  1. //創建數據模型  
  2. Ext.regModel('Person', {  
  3.     fields: ['name','age']  
  4. });  
  5. //創建Ajax代理  
  6. var ajaxProxy = new Ext.data.proxy.Ajax({  
  7.     url : 'personServer.jsp',  
  8.     model: 'Person',  
  9.     reader: 'json'  
  10. });  
  11. //創建請求參數對象  
  12. var operation = new Ext.data.Operation({  
  13.     action: 'read'//設置請求動作爲read  
  14. });  
  15. //讀取數據  
  16. ajaxProxy.doRequest(operation,callBack);  
  17. //doRequest方法的回調函數  
  18. function callBack(operation){  
  19.     //獲取原始響應數據  
  20.     var responseText = operation.response.responseText;  
  21.     //獲得記錄總數  
  22.     var totalRecords = operation.resultSet.totalRecords;  
  23.     //獲得記錄數組  
  24.     var records = operation.resultSet.records;  
  25.       
  26.     alert('使用Ajax代理讀取遠程數據,記錄總是:'+totalRecords);  
  27. }  
Jsp代碼  收藏代碼
  1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>  
  2. <%  
  3.     response.setContentType("application/json;charset=UTF-8");  
  4.     String result = "[{name: '張三', age : 20}, {name: '李四', age : 30}]";  
  5.     response.getWriter().write(result);  
  6. %>  


8、Ext.data.reader.Json示例 
Javascript代碼  收藏代碼
  1. //JSON格式的用戶及訂單信息  
  2. var userData = {  
  3.     "total" : 2000,  
  4.     "users": [{  
  5.         "id": 123,  
  6.         "name""張三",  
  7.         "orders": [{  
  8.             "id": 50,  
  9.             "total" : 100  
  10.         }]  
  11.     }]  
  12. }  
  13. //定義用戶User模型  
  14. Ext.regModel("User", {  
  15.     fields: [ 'id''name' ],  
  16.     hasMany: 'Order'//定義User與Order之間的一對多關係  
  17. });  
  18. //定義訂單Order模型  
  19. Ext.regModel("Order", {  
  20.     fields: [ 'id''total' ],  
  21.     belongsTo: 'User'//定義Order與User之間的多對一關係  
  22. });  
  23.   
  24. //創建memory代理  
  25. var memoryProxy = new Ext.data.proxy.Memory({  
  26.     model : 'User',  
  27.     reader: {  
  28.         type: 'json',//Ext.data.reader.Json讀取器  
  29.         root: 'users'  
  30.     },  
  31.     data : userData  
  32. });   
  33. //讀取數據  
  34. memoryProxy.read(new Ext.data.Operation(), callBack)  
  35. //數據讀取之後的回調函數  
  36. function callBack(result){  
  37.     //獲取總記錄數  
  38.     var count = result.resultSet.total;  
  39.     //獲取第一個用戶信息  
  40.     var user = result.resultSet.records[0];  
  41.     //獲取該用戶的第一個賬單信息  
  42.     var order = user.orders().getAt(0);  
  43.     alert('總記錄數:'+count+  
  44.           '\n姓名:'+user.get('name')+  
  45.           '\n賬單金額:'+order.get('total'));  
  46. }  


9、讀取複雜的JSON數據 
Javascript代碼  收藏代碼
  1. //JSON格式的用戶及訂單信息  
  2. var userData = {  
  3.     "users": [{  
  4.         "searchDate" : "2011-04-24",//查詢時間  
  5.         "role" : "admin",//查詢人角色  
  6.         "info" : {  
  7.             "id": 123,  
  8.             "name""張三"  
  9.         }  
  10.     }]  
  11. }  
  12. //定義用戶User模型  
  13. Ext.regModel("User", {  
  14.     fields: [ 'id''name' ]  
  15. });  
  16.   
  17. //創建memory代理  
  18. var memoryProxy = new Ext.data.proxy.Memory({  
  19.     model : 'User',  
  20.     reader: {  
  21.         type: 'json',//Ext.data.reader.Json讀取器  
  22.         root: 'users',  
  23.         record : 'info'//定位有效數據的位置  
  24.     },  
  25.     data : userData  
  26. });   
  27. //讀取數據  
  28. memoryProxy.read(new Ext.data.Operation(), callBack)  
  29. //數據讀取之後的回調函數  
  30. function callBack(result){  
  31.     //獲取第一個用戶信息  
  32.     var user = result.resultSet.records[0];  
  33.     alert('姓名:'+user.get('name'));  
  34. }  


10、Ext.data.Store示例 
Javascript代碼  收藏代碼
  1. //定義用戶User模型  
  2. Ext.regModel("User", {  
  3.     fields: ['name''age' ],  
  4.     proxy: {  
  5.         type: 'memory'  
  6.     }  
  7. });  
  8. //創建數據集對象  
  9. var myStore = new Ext.data.Store({  
  10.     autoLoad: true,  
  11.     data : [{name: '張三', age : 20},   
  12.             {name: '李四', age : 30}],  
  13.     model: 'User'  
  14. });  
  15. //遍歷Store中的記錄  
  16. var msg = ['遍歷Store中的記錄:'];  
  17. myStore.each(function(rec){  
  18.     msg.push('姓名:'+rec.get('name')+' 年齡:'+rec.get('age'));  
  19. });  
  20. alert(msg.join('\n'));  


11、Ext.data.ArrayStore示例 
Javascript代碼  收藏代碼
  1. //定義用戶User模型  
  2. Ext.regModel("User", {  
  3.     fields: ['name''age' ],  
  4.     proxy: 'memory'  
  5. });  
  6. //創建ArrayStore數據集對象  
  7. var myStore = new Ext.data.ArrayStore({  
  8.     autoLoad: true,  
  9.     data : [['張三',20],['李四',30]],//數組數據  
  10.     model: 'User'  
  11. });  
  12. //遍歷Store中的記錄  
  13. var msg = ['遍歷ArrayStore中的記錄:'];  
  14. myStore.each(function(rec){  
  15.     msg.push('姓名:'+rec.get('name')+' 年齡:'+rec.get('age'));  
  16. });  
  17. alert(msg.join('\n'));  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章