ExtJS: Как установить идентификатор комбобокса? - PullRequest
1 голос
/ 21 сентября 2010

У меня маленькая проблема.В моем приложении я всегда строю два связанных поля со списком - страна и города (затем выбирается страна - города начинают загружаться).Поэтому я подумал - я могу написать конструктор и свернуть мой код?Хорошо, я сделал это.Но у меня возникла проблема: у меня есть 2-3 пары этих связанных комбинированных списков на странице, и когда я выбираю во второй стране со списком, данные (города) загружаются при первой комбинации, потому что у них одинаковый идентификатор.Хорошо, теперь я пытаюсь передать идентификатор параметра конструктору, и это не сработало.Как установить идентификатор поля со списком, тогда я создаю объект?

Страна комбо

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'})

новый comboCountryClass ({town_name_id: 'townFormSearch'})

Ответы [ 3 ]

2 голосов
/ 21 сентября 2010

Вы можете установить идентификатор компонента, выполнив следующие действия:

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

Вы можете указать идентификатор по умолчанию, и когда вы передадите идентификатор в параметре конфигурации, он перезапишет значение по умолчанию.

Хотя ясогласитесь с @Upper Stage, вы должны попытаться ограничить количество жестко закодированных значений идентификаторов, которые вы имеете в форме - вместо этого вы можете получить элементы формы, используя имя формы.

1 голос
/ 21 сентября 2010

Я живу по правилу: «никогда не используйте жестко идентифицированные идентификаторы».Вы можете получить уникальный идентификатор из Ext JS, используя

Ext.id( null, 'someTextString' )

При использовании уникальных идентификаторов вам придется больше бухгалтерии, но вы не столкнетесь с проблемой, о которой пишете выше.

Иногда я храню уникальные идентификаторы локально в объекте, а затем при необходимости обращаюсь к этой переменной экземпляра.

this.idForCombo = Ext.id( null, 'someTextString' );
var myCmp = new SomeConstructor({
     id: this.idForCombo,
     ...more stuff });
0 голосов
/ 21 сентября 2010
myCombobox.id = yourId;
...