日期:2014-05-16  浏览次数:20348 次

在 ExtJs 中实现下拉列表(combo)联动
功能是:两个下拉列表 当第一个下拉列表的值变化时 第二个下拉列表的值随第一个下拉列表的值变化而变化 第一个下拉列表显示中国各个省份第二个显示每个省份的城市



    思路很简单:给两个下拉列表各定义一个数据源 捕获第一个下拉列表的选择事件 并加载第二个下拉列表的数据源



     以下的代码和注释 都是根据我自己的理解写的 有些不是很标准的地方希望前辈多指教 另外 我对ExtJs不是很熟悉 考虑到的问题不多也希望前辈多包含哈..



------------------代码区

/////////////数据源

//第一个下拉列表

var oneProxy = new Ext.data.HttpProxy({
    url : "/XxbmdSQuery.do?StoreFlag=14"//查找所有省份
});

//第二个下拉列表

var towProxy = new Ext.data.HttpProxy({
    url : "/XxbmdSQuery.do" //后面不带参数也可以 到后面加载的时候再赋参数
});

////////////以上是数据源



//////////// Json

//这个Json 表示表里的所有字段

var jsonReader = new Ext.data.JsonReader(
    {totalProperty : 'totalProperty',root : 'root'},
    [   {name : 'xxdmid'},
        {name : 'xxdmkeepType'}
    ]);

////////////以上是 Json



///////////数据转换

//这个数据转换就是将查找出来的数据 转换为Json格式

//第一个下拉列表

var oneStore = new Ext.data.Store({
    proxy : oneProxy,
    reader : jsonReader
});

//第二个下拉列表

var towStore = new Ext.data.Store({
    proxy : towProxy,
    reader : jsonReader
});

///////////以上是数据转换





///////////表单

var myForm = new Ext.form.FormPanel({

    id : 'myForm',

    url : path + "/qykhDSQuery.do", //这是表单提交的地方

    items:[{

        name : 'sheng',
        xtype: 'combo',
        autoLoad : true,
        editable:false, //是否可以手动输入
        triggerAction : 'all',
        fieldLabel: '省份',
        emptyText:'请选择省份', //默认值
        mode: 'local', //本地数据源
        store: oneStore, //以上定义过的第一个数据源
        displayField: 'xxdmkeepType',
        valueField: 'xxdmid',
        listeners : { //监听该下拉列表的选择事件
            select : function(combo, record, index) {

                //设置城市的下拉列表的值为空
                myForm.getForm().findField('shi').setValue("");

                //加载第二个数据源并传参数
                towStore.load({params : { StoreFlag : combo.value }});
            }
        }

    },{

        name : 'shi',
        xtype: 'combo',
        autoLoad : true,
        editable:false,
        triggerAction : 'all',
        fieldLabel: '城市',
        emptyText:'请选择城市',
        mode