ExtJS: головоломка со связанными списками - PullRequest
1 голос
/ 29 сентября 2010

Я пишу специальный комбо-объект, чтобы использовать его в качестве связанных комбо.Вот оно:

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 ]

1 голос
/ 30 сентября 2010
ChildCombo.setMasterField( masterField ) {
  masterField.on('change', function(field){
    this.getStore().filterBy( function(){ //filter by masterFIeld.getValue() } );
  })
}

Идея состоит в том, чтобы связать дочернее поле с родительским, а не родительским с дочерним, и таким образом вы можете связать любое поле формы любого типа, не только комбо.

Здесь, в дочернем комбо, вы должны хранить стри столбца [группа, значение, метка], где группа - это значение главного поля.

Таким образом, вы можете иметь режим, в котором не одно главное поле.

1 голос
/ 29 сентября 2010

Одна вещь, которую я вижу, это то, что у вас есть mode: 'local' config, а она должна быть удаленной.

Еще одна вещь, которую стоит рассмотреть: почему бы вам не сделать это больше так:

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() }
})});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...