ExtJS:如何设置组合框ID?

时间:2010-09-21 12:47:59

标签: extjs combobox linked-list set

我有点问题。在我的应用程序中,我总是建立两个相连的组合框 - 国家和城镇(然后选择国家 - 城镇开始加载)。所以我想 - 我写一个构造函数并最小化我的代码?好的,我做到了。但是我遇到了一个问题:我在页面上有2-3个这样的链接组合框,当我在第二个组合国家选择时,数据(城镇)加载到第一个组合,因为它具有相同的ID。好的 - 现在我尝试将构造函数的param id,它没有用。如何设置组合ID然后我创建一个对象?

国家/地区组合

comboCountryClass = Ext.extend(Ext.form.ComboBox, {
            fieldLabel: 'country',
            anchor: '95%',
            lazyRender:true,
            store:new Ext.data.Store({
                  proxy: new Ext.data.HttpProxy(
                    {url: '../lib/getRFB.php?rfb_type=countrys',
                    method: 'GET'}
                  ),
                  reader: countryReader,
                  autoLoad: true
            }),
            displayField:'country_name',
            valueField:'country_id',
            triggerAction:'all',
            mode:'local',
            listeners:{
                select:{
                    fn:function(combo, value) {
                        var modelCmp = Ext.getCmp(this.town_name_id);
                        alert(this.town_name_id);
                        modelCmp.setValue('');
                        modelCmp.getStore().proxy.setUrl('../lib/getRFB.php');
                        modelCmp.store.reload({
                            params: { 'country_id': this.getValue(),rfb_type: 'towns' }
                        });
                    }
                }
            },
            hiddenName:'country_id',
            initComponent: function() {comboCountryClass.superclass.initComponent.call(this);}})

和城镇组合

comboTownClass = Ext.extend(Ext.form.ComboBox, {
            fieldLabel:'town',
            displayField:'town_name',
            valueField:'town_id',
            hiddenName:'town_id',
            anchor: '95%',
            id:this.town_name_id || 'youuuu',
            store: new Ext.data.Store({
                  proxy: new Ext.data.HttpProxy(  
                    {url: 'lib/handlers/orgHandler.php?action=read&towns=true',
                    method: 'GET'}
                  ),
                  reader: townReader
            }),
            triggerAction:'all',
            mode:'local',
            initComponent: function() {comboTownClass.superclass.initComponent.call(this);}})

new comboTownClass({town_name_id:'townFormSearch'})

new comboCountryClass({town_name_id:'townFormSearch'})

3 个答案:

答案 0 :(得分:2)

您可以通过执行以下操作来设置组件的ID:

new comboTownClass({id:'townComboId'}); new comboCountryClass({id:'countryComboId'});

您可以指定默认ID,当您在config参数中传递ID时,它将覆盖默认值。

虽然我同意@Upper Stage,但您应该尝试限制表单中硬编码的id值 - 您可以改为使用表单名称来获取表单元素。

答案 1 :(得分:1)

我遵守规则:“永远不要使用硬编码的ID。”您可以使用

从Ext JS中检索唯一ID

Ext.id( null, 'someTextString' )

使用唯一身份证时会产生更多记账,但是您不会遇到上面写的问题。

有时我会在对象中本地存储唯一ID,然后在必要时引用该实例变量。

this.idForCombo = Ext.id( null, 'someTextString' );
var myCmp = new SomeConstructor({
     id: this.idForCombo,
     ...more stuff });

答案 2 :(得分:-1)

myCombobox.id = yourId;