0

コンボボックスに少し問題があります。イベント後にajaxを使用してリロードされるコンボボックスストアがあります。その後、 myCombo.setValue() を使用して、デフォルトのコンボボックス選択フィールドを設定します。それはうまくいきます。問題は、コンボをクリックしてドロップダウンリストが表示されたときです。そのリストは自動的に非表示になります。しかし、初めてだけで、フォームをリロードするまですべてがうまくいきます。コードの一部を表示できますか:

お店:


var ParentsStore =   Ext.create('Ext.data.Store', { 
    autoLoad: false,
    fields: ['id', 'name'],
    proxy: {
        type: 'ajax',
        url: 'index.php?aid=parents_combostore',
        reader: {
            type: 'xml',
            record: 'item',
            idProperty: 'ASIN',
            totalRecords: '@total'
        }
    }
});

ストアをリロードしています:


Ext.getCmp('userParent_combo_id').clearValue();

       ParentsStore.getProxy().extraParams = 
       {
                 typ :typ['usrtyp_id']
       };
            Ext.getCmp('userParent_combo_id').store.load();
            Ext.getCmp('userParent_combo_id').lastQuery = null; 

誰かが私を理解し、私を助けようとすることができますか?

よろしくお願いします!

4

2 に答える 2

0

load()メソッドは非同期です。つまり、 を呼び出した直後に store がロードされたと想定することはできませんload()。store load イベントのハンドラーを構成し、ロジックを続行する必要があります-setValue()など。

于 2012-04-29T23:45:19.053 に答える
0

バグはライブラリにあるとは思いませんが、私のコードにあるだけです!

これはロード ストアを呼び出すときの一部です


 xtype: 'radiogroup',
                    columns: 1,
                    fieldLabel: 'typ',
                    id: 'typ_radio_id',

                    items: [
                        usrtyp_item
                    ],
                    listeners: {
                            change: {
                                fn: function(field,new_value,old_value,options)
                                {
                                        typ=Ext.getCmp('typ_radio_id').getValue();

                                        if(second_change)
                                        {
                                            Ext.getCmp('userParent_combo_id').clearValue();


                                            ParentsStore.getProxy().extraParams = {
                                                typ :typ['usrtyp_id']
                                            };
                                            Ext.getCmp('userParent_combo_id').store.load();
                                            Ext.getCmp('userParent_combo_id').lastQuery = null; 

                                            second_change=0;
                                        }
                                        else second_change=1;

                                }
                            }
                    }

これはツリー パネルのリスナーで、setValue を使用します。


listeners: {
            'itemclick': function(this_el,record,item,index,e,eOpts)
            {
                    var user_info = getUserById( record.get('id') );    


                        parent_id=user_info['parent_id'];
                        second_change=0;

                        Ext.getCmp('userParent_combo_id').setValue( parent_id );
            }
}

「itemclick」の後、ラジオグループの「change」イベントが自動的に発生します。これは私のコードの一部ですが、重要な部分です。

于 2012-04-30T09:41:30.417 に答える