Extjs4.2 model关联读复杂XML

本文介绍如何使用ExtJS框架中的XML数据模型进行一对多的数据关联,并通过具体示例展示了教师与学生之间的模型关联配置及读取过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标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'
    }
});







内容概要:本文档详细介绍了基于MATLAB实现的无人机三维路径规划项目,核心算法采用蒙特卡罗树搜索(MCTS)。项目旨在解决无人机在复杂三维环境中自主路径规划的问题,通过MCTS的随机模拟与渐进式搜索机制,实现高效、智能化的路径规划。项目不仅考虑静态环境建模,还集成了障碍物检测与避障机制,确保无人机飞行的安全性和效率。文档涵盖了从环境准备、数据处理、算法设计与实现、模型训练与预测、性能评估到GUI界面设计的完整流程,并提供了详细的代码示例。此外,项目采用模块化设计,支持多无人机协同路径规划、动态环境实时路径重规划等未来改进方向。 适合人群:具备一定编程基础,特别是熟悉MATLAB和无人机技术的研发人员;从事无人机路径规划、智能导航系统开发的工程师;对MCTS算法感兴趣的算法研究人员。 使用场景及目标:①理解MCTS算法在三维路径规划中的应用;②掌握基于MATLAB的无人机路径规划项目开发全流程;③学习如何通过MCTS算法优化无人机在复杂环境中的飞行路径,提高飞行安全性和效率;④为后续多无人机协同规划、动态环境实时调整等高级应用打下基础。 其他说明:项目不仅提供了详细的理论解释和技术实现,还特别关注了实际应用中的挑战和解决方案。例如,通过多阶段优化与迭代增强机制提升路径质量,结合环境建模与障碍物感知保障路径安全,利用GPU加速推理提升计算效率等。此外,项目还强调了代码模块化与调试便利性,便于后续功能扩展和性能优化。项目未来改进方向包括引入深度强化学习辅助路径规划、扩展至多无人机协同路径规划、增强动态环境实时路径重规划能力等,展示了广阔的应用前景和发展潜力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值