Потеря прицела в выпадающем списке ExtJS 4.2

У меня есть всплывающее окно с выпадающим списком и несколькими кнопками. Идея состоит в том, чтобы сделать выбор в выпадающем списке, а затем либо сохранить выбор в магазине, либо отменить. Я делал это раньше и никогда не было проблем, но с этим кодом я получаю Uncaught TypeError: Cannot call method 'apply' of undefined всякий раз, когда я пытаюсь взаимодействовать с комбо. Мне кажется, что ExtJS пытается запустить код, предназначенный для магазина, в выпадающем списке.

Я загружаю всплывающее окно с Ext.create('Account.Window.Reuse');

Определения:

Ext.define('SimpleAccount', {
    extend: 'Ext.data.Model',
    idProperty: 'AccountID',
    fields: [ {
        name: 'AccountID',
        type: 'int',
        useNull: true
    }, 'Name']
});

var userAccountReuseStore = Ext.create('Ext.data.Store', {
    model: 'SimpleAccount',
    storeId: 'userAccountReuseStore',
    data: [{"AccountID":"1", "Name":"FirstAccount"},
        {"AccountID":"2", "Name":"SecondAccount"},
        {"AccountID":"3", "Name":"ThirdAccount"}]
});

Ext.define('Account.Reuse.ComboBox', {
    extend: 'Ext.form.ComboBox',
    alias: 'widget.accountReuseComboBox',
    initComponent: function(){
        Ext.apply(this, {
            fieldLabel: 'Account',
            displayField: 'Name',
            valueField: 'AccountID',
            queryMode: 'local'
        })
    }
});

Ext.define('Account.Reuse.Fieldset', {
    extend: 'Ext.form.FieldSet',
    alias: 'widget.accountReuseFieldset',
    initComponent: function(){
        Ext.apply(this, {
            items: [
                {
                    xtype: 'label',
                    cls: 'text-important',
                    margin: '0 0 10 0',
                    style: 'display: block',
                    text: 'Only attach an account you have permission to use.  After attaching the account you will not be able to use, remove, or edit it until approved by SCSAM'
                },
                {
                    xtype: 'accountReuseComboBox',
                    store: userAccountReuseStore
                }
            ]
        });
        this.callParent();
    }
});

Ext.define('Account.Reuse.Details', {
    extend: 'Ext.form.Panel',
    alias: 'widget.accountReuseDetails',
    initComponent: function(){
        Ext.apply(this, {
            plain: true,
            border: 0,
            bodyPadding: 5,
            fieldDefaults: {
                labelWidth: 55,
                anchor: '100%'
            },
            layout: {
                type: 'vbox',
                align: 'stretch',
                flex: 1
            },
            items: [
                {
                    xtype: 'accountReuseFieldset',
                    defaults: {
                        labelWidth: 89,
                        anchor: '100%',
                        layout: {
                            type: 'vbox',
                            defaultMargins: {top: 0, right: 5, bottom: 0, left: 0},
                            align: 'stretch'
                        }
                    },
                    title: 'Details',
                    collapsible: false
                }]
        });
        this.callParent();
    }
});

Ext.define('Account.Window.Reuse', {
    extend: 'Ext.window.Window',
    alias: 'widget.accountWindowReuse',
    initComponent: function(){
        Ext.apply(this, {
            title: 'Account Details',
            width: 400,
            autoShow: true,
            modal: true,
            layout: {
                type: 'fit',
                align: 'stretch'  // Child items are stretched to full width
            },
            items: [{
                xtype: 'accountReuseDetails',
                id: 'attachAccountReuseForm'
            }],
            dockedItems: [{
                xtype: 'toolbar',
                dock: 'bottom',
                ui: 'footer',
                layout: {
                    pack: 'center'
                },
                items: [{
                    minWidth: 80,
                    text: 'Attach',
                    id: 'saveButton',
                    handler: function(){
                        var rec = this.up('accountWindowReuse').down('accountReuseDetails').getValues();
                        var store = Ext.getStore('userAccountReuseAttachStore');
                        store.add(rec);
                        this.up('window').close();
                    }
                },{
                    minWidth: 80,
                    text: 'Cancel',
                    handler: function(){
                        this.up('window').close();
                    }
                }]
            }]
        });
        this.callParent();
    }
});

1 ответ

Решение

Похоже, вы забыли позвонить родителю в вашем Account.Reuse.ComboBoxinitComponent функция, поэтому комбобокс не инициализирован должным образом.

Ваш Account.Reuse.ComboBoxinitComponent функция должна выглядеть так:

initComponent: function(){
    Ext.apply(this, {
        fieldLabel: 'Account',
        displayField: 'Name',
        valueField: 'AccountID',
        queryMode: 'local'
    });
    this.callParent();
}
Другие вопросы по тегам