Extjs4.2 model关联读复杂XML
来源:互联网 发布:音效下载 知乎 编辑:程序博客网 时间:2024/05/22 12:46
目标XML文件内容
<?xml version="1.0" encoding="UTF-8"?><teacherList><teacherTotal>2</teacherTotal><teacher><name>teacher1</name><sex>F</sex><hasManyStudent>//这一层必须得有,对应model中hasmany name<studentTotal>2</studentTotal><student><name>student1_1</name><sex>M</sex></student><student><name>student1_2</name><sex>F</sex></student></hasManyStudent></teacher><teacher><name>teacher2</name><sex>M</sex><hasManyStudent>//这一层必须得有,对应model中hasmany name<studentTotal>2</studentTotal><student><name>student2_1</name><sex>M</sex></student><student><name>student2_2</name><sex>M</sex></student></hasManyStudent></teacher></teacherList>teacher model
Ext.define('AM.model.teacher', { extend: 'Ext.data.Model', requires: [ 'Ext.data.Field', 'Ext.data.proxy.Ajax', 'Ext.data.reader.Xml', 'Ext.data.association.HasMany' ], uses: [ 'AM.model.student' ], fields: [ { name: 'sex' }, { name: 'name' } ], proxy: { //关联model貌似必须各自定义自己的proxy,而不能统一放store中,即使url一样 type: 'ajax', headers: { 'Content-Type': 'text/xml;charset=UTF-8' }, reader: { type: 'xml', root: 'teacherList',//可以不写 totalProperty: 'teacherTotal',//可以不写 record: 'teacher' } }, hasMany: { model: 'AM.model.student',//关联子model name: 'hasManyStudent'//对应XML中的实际节点名 }});student model
Ext.define('AM.model.student', { extend: 'Ext.data.Model', requires: [ 'Ext.data.Field', 'Ext.data.proxy.Ajax', 'Ext.data.reader.Xml', 'Ext.data.association.BelongsTo' ], uses: [ 'AM.model.teacher' ], fields: [ { name: 'sex' }, { name: 'name' } ], proxy: { //关联model貌似必须各自定义自己的proxy,而不能放store中 type: 'ajax', headers: { 'Content-Type': 'text/xml;charset=UTF-8' }, reader: { type: 'xml', root: 'hasManyStudent',//可以不写 totalProperty: 'studentTotal',//可以不写 record: 'student' } }, belongsTo: { model: 'AM.model.teacher'//关联父model }});
store
Ext.define('AM.store.mystore', { extend: 'Ext.data.Store', requires: [ 'AM.model.teacher' ], constructor: function(cfg) { var me = this; cfg = cfg || {}; me.callParent([Ext.apply({ model: 'AM.model.teacher', storeId: 'testStore' //必须设storeId }, cfg)]); }});
controller
Ext.define('AM.controller.MyController', { extend: 'Ext.app.Controller', models: [ 'student', 'teacher' ], stores: [ 'tstore' ], views: [ 'MyViewport' ], onReadClick: function() { var me = this; var teacherModel = me.getModel('teacher'); var studentModel = me.getModel('student'); var userStore = me.getStore('mystore'); teacherModel.getProxy().url = '/'+GAppID+'/$/callback?callback=IWCallBack1'; studentModel.getProxy().url = '/'+GAppID+'/$/callback?callback=IWCallBack1'; userStore.load({ callback: function (records, operation, success) { if (success) { console.log(records); //Ext.MessageBox.alert('成功',records[0].get('name')); Ext.MessageBox.alert('成功',records[0].get('name')+'_'+records[0].get('sex')+'_'+records[0].hasManyStudent().getAt(0).get('name')+'_'+records[0].hasManyStudent().getAt(1).get('name')); //Ext.MessageBox.alert('成功',records[0].student().count()); } } }); //Ext.MessageBox.alert('成功','成功'); }, init: function(application) { this.control({ "#read": { click: this.onReadClick } }); }});执行结果
如果XML文件的形式是这样
<?xml version="1.0" encoding="UTF-8"?><teacherList><teacherTotal>2</teacherTotal><teacher><name>teacher1</name><sex>F</sex><hasManyStudent><studentTotal>2</studentTotal><name>student1</name> //像这样record属性对应的节点如果没有子节点了 model field 必须要设置mapping属性为 '/'<name>student2</name></hasManyStudent></teacher><teacher><name>teacher2</name><sex>M</sex><hasManyStudent><studentTotal>2</studentTotal><name>student3</name><name>student4</name></hasManyStudent></teacher></teacherList>
model
Ext.define('AM.model.student', { extend: 'Ext.data.Model', requires: [ 'Ext.data.Field', 'Ext.data.proxy.Ajax', 'Ext.data.reader.Xml', 'Ext.data.association.BelongsTo' ], uses: [ 'AM.model.teacher' ], fields: [ { mapping: '/', //注意这里要设置mapping属性 name: 'name' } ], proxy: { type: 'ajax', headers: { 'Content-Type': 'text/xml;charset=UTF-8' }, reader: { type: 'xml', root: 'hasManyStudent', totalProperty: 'studentTotal', record: 'name'//这是一个没有子节点的record } }, belongsTo: { model: 'AM.model.teacher' }});
0 0
- Extjs4.2 model关联读复杂XML
- EXTJS4 MODEL例子
- extjs4.2 -- 选中grid表格中一行Model知识
- ExtJS4.2学习(4)——基础知识之Model篇
- ajax的同步/异步请求,以及extjs4中如何在model中实现两张无外键关联表的查询操作
- Extjs4.10Model模型详解
- EXTJS4 Ext.data.TreeStore model
- ExtJS4.x数据模型之Model
- Extjs4.10Model模型详解
- sencha2中建立复杂Model
- Extjs4 grid根据model自动生成列
- ExtJS4学习笔记(十五)---Ext.data.Model
- ExtJs4.1:取得model的reference
- EXTJS4 新特性之Ext.data.Model
- ExtJs4学习(六)MVC中的Model
- EXTJS4 新特性之Ext.data.Model
- Extjs4.2 grid datastore读取xml和json
- Extjs4.2 grid datastore读取xml和json
- iOS开发TTS技术即文本转语音
- Light oj 1038 - Race to 1 Again(概率dp)
- Aoj 2450 Do use segment tree【树链剖分】
- 欧几里得算法求两个正整数的最大公因子
- iOS <CoreLocation>定位框架的理解与运用
- Extjs4.2 model关联读复杂XML
- iOS8 GCD的使用
- 基类析构函数为虚函数的研究
- 作为码农,我们为什么要写作
- 数据库最最常用语句(10年工作笔记)
- happens-before规则解析
- yael for ubuntu 部署日志
- ZOJ - 2421 Recaman's Sequence(打表水题)
- swift函数