我有点问题。在我的应用程序中,我总是建立两个相连的组合框 - 国家和城镇(然后选择国家 - 城镇开始加载)。所以我想 - 我写一个构造函数并最小化我的代码?好的,我做到了。但是我遇到了一个问题:我在页面上有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'})
答案 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;