Extjs学习笔记(-):ComboBox联动(下)

  说是下篇,其实也无所谓上下了,只是我在上一篇关于实现ComboBox联动的文章中提出的问题,虽然也在Google和园子里泡了很久,苦于E文太菜,没能在Extjs官方论坛中寻求得到帮助,幸好皇天不负有心人,通过这么多天的努力,也总算吧问题给解决了,其实也不知道是不是实现我这个问题的最佳方法了,只算是能够实现吧,所以,我也就算抛砖引玉吧,希望各位大虾能多多指教.问题的提出,请参看我的上篇文章:Extjs学习笔记(-):ComboBox联动()

    上篇曾提出不能实现第二个ComboBox数据的动态加载,下面先把正确的代码贴出,然后再就Extjs的某些属性,谈谈我的理解,不对之处,望指正.

 

  1     //分类方式数据源

  2    var store=new Ext.data.Store({

  3        autoLoad:true,

  4        proxy:new Ext.data.HttpProxy({

  5            url:'../admin/GetCatWise.aspx'

  6        }),

  7        reader:new Ext.data.JsonReader({

  8            id:'ID',

  9            fields:['ID','Name']

 10        }),

 11        remoteSort:true

 12    });

 13     //第二个ComboBox数据源

 14    var comstore =new Ext.data.Store({

 16        autoLoad:false,

 17        proxy:new Ext.data.HttpProxy({

 18            url:'../admin/GetCategory.aspx',

 20            method:'post'

 21        }),

 22        reader:new Ext.data.JsonReader({

 23            id:'ID',

 24            fields:['ID','CategoryName']

 25        }),

 26            remote:true

 27    });

 28

 29var form=new Ext.form.FormPanel({

 30        labelWidth:55,

 32        bodyStyle:'padding:5px 5px 0',

 33        frame:true,

 34        items:[{

 74            fieldLabel:'分类方式',

 75            xtype:'combo',

 76            editable :false,

 77            name:'labCatWise',

 78            id:'cmbCatWise',

 79            lazyInit:false,

 80            emptyText :'请选择',

 81            displayField:'Name',

 82            valueField :'ID',

 83            mode:'local',

 84            store:store,

 85            listeners:{select:function(){

 86                try{

 87                    var parent=Ext.getCmp('comParent');

 90                    parent.store.reload({params:{wiseID:this.value}});

 91                }

 92                catch(ex)

 93                {

 94                    Ext.MessageBox.alert(ex);

 95                }

 96            }},

 97            triggerAction:'all',

 98            typeAhead :true,

 99            anchor:'100%'

100           

101        }, {

102            fieldLabel:'所属父类',

103            xtype:'combo',

104            editable :false,

105            emptyText :'请选择',

106            id:'comParent',

107            loadingText :'正在请求数据,请稍后',

108            store:comstore,

109            displayField:'CategoryName',

110            valueField :'ID',

111            mode:'local',

112            triggerAction:'all',

113            name:'labParent',

114            anchor:'100%'

115        }]

121    });

    现在,我就上面的代码做几点解释:

    1.通过设置第一个ComboBoxSelect事件,select事件中动态的加载第二个ComboBoxstore,以达到ComboBox的联动效果.

    2.我在select事件中,通过给第二个store传递不同的参数,然后再重新加载数据,以改变第二个store,但我在之前的实现方式是这样的:

       var store=new Ext.data.Store(...);

       secondCombo.store=store;

   这样是不能实现的,这就引发了我对Extjs类的配置属性(config),公共属性(),公共方法(Method)的思考,我认为,Extjs类的配置属性是不能被动态配置的,就如同上面这样的写法,当然,可能可以通过调用或设置某些公共的方法和属性来改变这些配置属性,但不能直接设置.不知道我这样理解对否?

    3.mode的理解,请注意高亮显示,在这里,我们把mode设置成'local',原因再于,在第一个comboBoxstore,我们设置了她的autoload属性为true,也就是在页面加载的时候就已经从服务器获取了数据,所以,我们在第一个ComboBox中的Mode就设置为local,原因是我们已经获取了数据.第二个ComboBox中的store的数据,是我们在第一个ComboBoxselect事件中获取的,所以,在这里,我们也要把她的mode设置成local.关于comboBoxMode配置属性的设置,需要根据自己的实际情况来设置,需要大家在不断的练习中掌握.

    好了,本说我E文菜,看来,我的中文更菜哦,不多说,望大家指正.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值