我编写特殊的组合对象以将其用作链接组合。这是:
comboDivClass = Ext.extend(Ext.form.ComboBox, {
fieldLabel: 'Divisions',
anchor: '95%',
lazyRender:true,
store:new Ext.data.Store({
proxy: proxy,
baseParams:{rfb_type:'divisions'},
reader: divReader,
autoLoad: true
}),
displayField:'div_name',
allowBlank:false,
valueField:'div_id',
triggerAction:'all',
mode:'local',
listeners:{
select:{
fn:function(combo, value) {
if (this.idChildCombo) {
var modelCmp = Ext.getCmp(this.idChildCombo);
modelCmp.setValue('');
modelCmp.getStore().reload({
params: { 'div_id': this.getValue() }
});
}
}
}
},/**/
hiddenName:'div_id',
initComponent: function() {comboDivClass.superclass.initComponent.call(this);}})
正如您所看到的,这个组合框在子组合框商店(设置为idChildCombo)中加载数据。 好。这是我如何宣布它
new comboDivClass({id:'sub0div',idChildCombo:'sub1div'}),
new comboDivClass({id:'sub1div'})
是的它可行,但它有一些奇怪的麻烦 - 它不仅加载sub1div存储,它也加载在sub0div存储。为什么?我做错了什么?
答案 0 :(得分:1)
我看到的一件事是你有mode: 'local'
配置,而它应该是远程的。
要考虑的其他事项:你为什么不这样做:
var c1 = new comboDivClass({id:'sub0div'});
var c2 = new comboDivClass({id:'sub1div'});
c1.on('select',function(combo, value) {c2.getStore().reload({
params: { 'div_id': c1.getValue() }
})});
答案 1 :(得分:1)
ChildCombo.setMasterField( masterField ) {
masterField.on('change', function(field){
this.getStore().filterBy( function(){ //filter by masterFIeld.getValue() } );
})
}
我们的想法是将子字段链接到父级而不是父级到子级,这样您就可以链接到任何类型的表单字段,而不仅仅是组合。
这里的子组合你必须有三列[group,value,label]的商店,其中group是master字段的值。
通过这种方式,您可以设置模式而不是一个主字段。