ExtJS:链接组合框拼图

时间:2010-09-29 11:10:26

标签: extjs combobox

我编写特殊的组合对象以将其用作链接组合。这是:

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存储。为什么?我做错了什么?

2 个答案:

答案 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字段的值。

通过这种方式,您可以设置模式而不是一个主字段。