Extjs4之下拉框三级联动

最近做了一个小的案例,用到了下拉框的三级联动效果。这个三级联动是系部、专业、班级。通过系部可以获取对应的专业,通过专业又可以获取对应的班级。具体实现如下:

一、系部下拉框

//系部信息
//定义下拉框的Model对象,包含两个属性:id,name
Ext.define('DepInf', {
    extend: 'Ext.data.Model',
    fields: [
                 { name: 'depId', type: 'int' },
                 { name: 'depName', type: 'string' }
             ]
});
//后台获取数据,数据类型:Json,格式是:{depInfCount:3,depInf:{depId:1,depName:'aaa'}}
var COMdepInfComboStore = Ext.create('Ext.data.Store', {
    model: 'DepInf',
    proxy: {
        type: 'ajax',//请求方式
        url: 'aspx/DepInf/List4Combo.aspx',//获取数据的路径
        reader: {
            type: 'json',//返回到前台的数据类型
            totalProperty: 'depInfCount',
            root: 'depInf'
        }
    },
    autoLoad: false//是否自动加载
});
//下拉框加载数据
COMdepInfComboStore.load({
    scope: this,
    callback: function (records, operation, success) {
        var responseData = COMdepInfComboStore.getProxy().getReader().rawData;
        if (typeof (responseData) == "undefined") {
            return;
        }
        var responseFlag = responseData.success;
        if (responseFlag != null && responseFlag == false) {
            Ext.Msg.alert('温馨提示', '您好,加载系部下拉框失败!');
        }
    }
});
//创建下拉框
var COMdepInfCombo = Ext.define('COMDepInfCombo', {
    extend: 'Ext.form.ComboBox',
    xtype: 'comcmb_dep',
    fieldLabel: '系部',
    store: COMdepInfComboStore,
    queryMode: 'local',
    width: 350,
    editable: false,      //不允许输入
    forceSelection: true, //必须选择一项
    emptyText: '请选择',//提示文本
    style: 'margin: 3px 0 0 0',
    displayField: 'depName',//下拉框中显示文本
    valueField: 'depId',//下拉框中value值,也就是<option>标签中value属性值
    name: 'depInfCombo',
    listeners: {//事件监听
        select: function (combo, record, index) {//选择事件监听
            if (record.length != 0) {
                COMmajorComboStore.proxy.url = 'aspx/Depmajor/List4Combo.aspx?depId=' + combo.value;//获取专业的数据
                COMmajorComboStore.load({
                    scope: this,
                    callback: function (records, operation, success) {
                        var responseData = COMmajorComboStore.getProxy().getReader().rawData;
                        if (typeof (responseData) == "undefined") {
                            return;
                        }
                        var responseFlag = responseData.success;
                        if (responseFlag != null && responseFlag == false) {
                            Ext.Msg.alert('温馨提示', '您好,加载专业下拉框失败!');
                        }
                    }
                });
            }
        }
    }
});

二、专业下拉框

Ext.define('MajorInf', {
    extend: 'Ext.data.Model',
    fields: [
                 { name: 'majorId', type: 'int' },
                 { name: 'majorName', type: 'string' }
             ]
});
var COMmajorComboStore = Ext.create('Ext.data.Store', {
    model: 'MajorInf',
    proxy: {
        type: 'ajax',
        reader: {
            type: 'json',
            totalProperty: 'majorInfCount',
            root: 'majorInf'
        }
    },
    autoLoad: false
});

var COMmajorCombo = Ext.define('COMMajorCombo', {
    extend: 'Ext.form.ComboBox',
    xtype: 'comcmb_major',
    fieldLabel: '专业',
    store: COMmajorComboStore,
    queryMode: 'local',
    width: 350,
    editable: false,      //不允许输入
    forceSelection: true, //必须选择一项
    emptyText: '请选择',
    style: 'margin: 3px 0 0 0',
    displayField: 'majorName',
    valueField: 'majorId',
    name: 'majorCombo',
    listeners: {
        select: function (combo, record, index) {
            COMclassComboStore.proxy.url = "Admin/aspx/Depclass/List4Combo.aspx?majorId=" + combo.value;
            COMclassComboStore.load({
                scope: this,
                callback: function (records, operation, success) {
                    var responseData = COMclassComboStore.getProxy().getReader().rawData;
                    if (typeof (responseData) == "undefined") {
                        return;
                    }
                    var responseFlag = responseData.success;
                    if (responseFlag != null && responseFlag == false) {
                        Ext.Msg.alert('温馨提示', '您好,加载班级下拉框失败!');
                    }
                }
            });
        }
    }
});

三、班级下拉框

//班级信息
Ext.define('ClassInf', {
    extend: 'Ext.data.Model',
    fields: [
                 { name: 'classNo', type: 'string' },
                 { name: 'className', type: 'string' }
             ]
});
var COMclassComboStore = Ext.create('Ext.data.Store', {
    model: 'ClassInf',
    proxy: {
        type: 'ajax',
        reader: {
            type: 'json',
            totalProperty: 'classInfCount',
            root: 'classInf'
        }
    },
    autoLoad: false
});

var COMclassCombo = Ext.define('COMclassCombo', {
    extend: 'Ext.form.ComboBox',
    xtype: 'comcmb_class',
    fieldLabel: '班级',
    store: COMclassComboStore,
    queryMode: 'local',
    width: 350,
    editable: false,         //不允许输入
    forceSelection: true,   //必须选择一项
    emptyText: '请选择',
    style: 'margin: 3px 0 0 0',
    displayField: 'className',
    valueField: 'classNo',
    name: 'classCombo'
    }
});
这都是自定义控件的方式实现的,使用时只在Extjs代码中通过配置的方式{xtype:comcmb_class}加入即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值