チーム、
奇妙な問題があります。
私は2つのコンボボックスを持っていますが、他の値を使用してそのうちの1つをカスケードしたいと思います。
したがって、あるコンボボックスの選択イベントで、別のコンボボックスを取得し、そのストアをロードしています。
しかし、私が観察したのは以下の場合です。
- ユーザーが最初のコンボボックスの値を初めて選択するため、2番目のコンボボックスのストアが読み込まれます。
- ユーザーが初めて2番目のコンボボックスを選択すると、AJAX呼び出しが行われます。理由がわかりませんか?
- もう一度、ユーザーがコンボボックス1を選択すると、ストアはコンボボックス2番目にロードされます
- ユーザーが2番目のコンボボックスをもう一度選択した場合、AJAX呼び出しは行われません(AJAX呼び出しが初めて行われる理由)
ステップ2で、AJAX呼び出しが2番目のコンボに対して行われる理由を理解できません。これは、ステップ1ですでにロードされているためです。
コードの詳細
xtype: 'combo',id='firstcombo', name: 'DEFAULT_VALUE' ,minChars:2, value: decodeHtmlContent('') ,width:200 ,listWidth:500, resizable: true,
valueField : 'id', displayField: 'id', pageSize: 15,forceSelection:true, enableKeyEvents: true,
store: new Ext.data.Store({reader: new Ext.data.CFQueryReader({id: 'NAME',
fields:[{name:'id', mapping:'id'}]}),
fields: [{name:'id', mapping:'id'}],
url:'server/ajax/Params'
}
}),
listeners : {
select:function(combo, record, index) {
this.setRawValue(decodeHtmlContent(record.get('id')));
cascadeFields();
}
xtype: 'combo',id='secondcombo', name: 'DEFAULT_VALUE' ,minChars:2, value: decodeHtmlContent('') ,width:200 ,listWidth:500, resizable: true,
valueField : 'id', displayField: 'id', pageSize: 15,forceSelection:true, enableKeyEvents: true,
store: new Ext.data.Store({reader: new Ext.data.CFQueryReader({id: 'NAME',
fields:[{name:'id', mapping:'id'}]}),
fields: [{name:'id', mapping:'id'}],
url:'server/ajax/Params',
baseParam:{valuefirst:''}
},
listeners: {
beforeload: function(store, options) {
var value = Ext.getCmp('fistcombo').value;
Ext.apply(options.params, {
valuefirst:value
});
},
}),
listeners : {
select:function(combo, record, index) {
this.setRawValue(decodeHtmlContent(record.get('id')));
}
function cascadeFields()
{
var combo = Ext.getCmp('secondcombo');
if(combo.store)
{
var store = combo.store;
combo.setDisabled(true);
combo.clearValue('');
combo.store.removeAll();
combo.store.load();
combo.setDisabled(false);
}
}