Dieser Part ist doch recht tricky. nach 2 Tagen nerviger Sucherrei und unzähligen Tuts habe ich eine einfache Möglichkeit gefunden mehrerer Comboboxen zu verlinken.
Wenn die Grid geladen ist sollten alle Abhängigen Comboxen mit den Values der Parentgridcell gefüllt sein.
Dazu braucht man
1) eine Combobox die die die Daten Remote von Server holt. Und dem Server sagt welche Daten. Dazu wird das “bevorequery” im Listener des JsonStores verwendet.
bevorquery wird ausgeführt bevor der Request des Stores auf den Server ausgeführt wird. Der Trick hier : Wir führen den request mit den Parametern aus der Abhängigen Box schon hier aus und kehren mit return false zurück. Damit wird der initialload nicht ausgeführt.
new Ext.form.ComboBox({
id :'survey_orga_name',
typeAhead :true,
triggerAction :'all',
valueField :'orgaID',
editable :true,
displayField :'orga_name',
selectOnFocus :true,
typeAhead :'true',
hiddenName :'orgaID',
mode :'remote',
lazyRender : true,
store:
this.combostore_survey_orga_name=new Ext.data.JsonStore({
url:'/your url', //gets called after "beforequery" without any parameters from the grid
root:'data',
restful:true,
autoload:false,
fields:[
{
name:'orgaID',
type:'string'
},
{
name:'orga_name',
type:'string'
}
]
}),
listClass: 'x-combo-list-small',
listeners :
{
beforequery:
{
fn:function(qe)
{
var company_name = Ext.getCmp('survey_company_name').getValue();
var orga_name = Ext.getCmp('survey_orga_name').getValue();
var orgagroup_name = Ext.getCmp('survey_orgagroup_name').getValue();
combostore_survey_orga_name.load({
params:{
column_name:'orga_name',
company_name: company_name,
orga_name : orga_name,
orgagroup_name : orgagroup_name
}
});
return false; // important. return directly to prevent next unconfigured request with standardparams
}
},
select:
{
fn:function(combo, value)
{
var company_name = Ext.getCmp('survey_company_name').getValue();
var orga_name = Ext.getCmp('survey_orga_name').getValue();
var orgagroup_name = Ext.getCmp('survey_orgagroup_name').getValue();
//combostore_survey_orga_name.load({params:{column_name:'orga_name',
//company_name: company_name, orga_name : orga_name,
// orgagroup_name : orgagroup_name}});
}
}
}
})
Die Serverantwort sieht so aus.
{"totalCount":2,"data":[{"orga_name":"MySQL","orgaID":"1"},{"orga_name":"MySQLsss","orgaID":"3"}]}
[/php]
new Ext.form.ComboBox({
id :'survey_company_name',
typeAhead :true,
triggerAction :'all',
valueField :'companyID',
editable :true,
displayField :'company_name',
selectOnFocus :true,
typeAhead :'true',
hiddenName :'companyID',
mode :'local',
lazyRender : true,
store:
this.combostore_survey_company_name=new Ext.data.SimpleStore({
data: [['165','Deutsche Factoring Bank'],['159','Frontend-Development.ch'],['168','Kreis- und Stadtsparkasse Kaufbeuren '],['116','Kreissparkasse Esslingen-Nürtingen'],['162','Kreissparkasse Halle (Westf.)'],['174','Kreissparkasse Ostalb'],['163','Kreissparkasse Schwalm-Eder'],['95','Kreissparkasse Stendal'],['171','Kreissparkasse Walsrode'],['153','Müritz-Sparkasse'],['170','Sparkasse Bodensee'],['164','Sparkasse Deggendorf'],['90','Sparkasse Donnersberg'],['85','Sparkasse Emsland'],['173','Sparkasse Freising'],['92','Sparkasse Gifhorn-Wolfsburg'],['106','Sparkasse Harburg-Buxtehude'],['166','Sparkasse Hohenlohekreis'],['161','Sparkasse Jerichower Land'],['141','Sparkasse Langen-Seligenstadt'],['169','Sparkasse LeerWittmund'],['79','Sparkasse Leipzig'],['104','Sparkasse Meissen'],['100','Sparkasse Oberlausitz Niederschlesien'],['172','Sparkasse Rotenburg-Bremervörde'],['80','Sparkasse Rottal-Inn'],['160','Sparkasse Schopfheim-Zell'],['167','Sparkasse Sonneberg']],
fields:[
{name:'companyID',type:'string'},
{name:'company_name',type:'string'}
]
}),
listClass: 'x-combo-list-small',
listeners :
{
select:
{
fn:function(combo, value)
{
var company_name = Ext.getCmp('survey_company_name').getValue();
alert(company_name);
var orga_name = Ext.getCmp('survey_orga_name').getValue();
var orgagroup_name = Ext.getCmp('survey_orgagroup_name').getValue();
combostore_survey_orga_name.load({params:{column_name:'company_name', company_name: company_name, orga_name : orga_name, orgagroup_name : orgagroup_name}});
}
}
}
})
},{
id : 'orga_name',
header : 'Abteilung',
inputType:'textfield',
dataIndex : 'orga_name',
sort : 'orga_name',
sortable : true,
width :100,
editor :
new Ext.form.ComboBox({
id :'survey_orga_name',
typeAhead :true,
allQuery: 'dfdsfdsf'+Ext.getCmp('survey_company_name').getStore(),
triggerAction :'all',
valueField :'orgaID',
editable :true,
displayField :'orga_name',
selectOnFocus :true,
typeAhead :'true',
hiddenName :'orgaID',
mode :'remote',
lazyRender : true,
store:
this.combostore_survey_orga_name=new Ext.data.JsonStore({
url:'/cocominZend/0.0.1/public/survey/store/getcombo/columnname/orga_name/'
,root:'data'
,restful:true,autoload:false
,
fields:[
{name:'orgaID',type:'string'},
{name:'orga_name',type:'string'}
]
}),
listClass: 'x-combo-list-small',
listeners :
{
beforequery:
{
fn:function(qe)
{
var company_name = Ext.getCmp('survey_company_name').getValue();
var orga_name = Ext.getCmp('survey_orga_name').getValue();
var orgagroup_name = Ext.getCmp('survey_orgagroup_name').getValue();
combostore_survey_orga_name.load({params:{column_name:'orga_name', company_name: company_name, orga_name : orga_name, orgagroup_name : orgagroup_name}});
return false;
}
},
select:
{
fn:function(combo, value)
{
alert('called select');
var company_name = Ext.getCmp('survey_company_name').getValue();
var orga_name = Ext.getCmp('survey_orga_name').getValue();
var orgagroup_name = Ext.getCmp('survey_orgagroup_name').getValue();
//combostore_survey_orga_name.load({params:{column_name:'orga_name', company_name: company_name, orga_name : orga_name, orgagroup_name : orgagroup_name}});
}
}
}
})
}
