Ext JS事件未触发

Ext JS Event not firing

本文关键字:事件 JS Ext      更新时间:2023-09-26

我有一个应用程序,一切都很好。然而,我不能捕获mainTabChanged事件,也不知道为什么。我做了这个例子中的所有事情,控制台记录FIRED,但从来没有记录RECEIVED

为什么?

Ext.define('MyApp.controller.Tab', {
    extend:'Ext.app.Controller',
    init:function () {
        var me = this;
        me.mainWindow = me.getView('tab.List').create();
        me.control({
            'mainTab': {
                mainTabChanged: me.onMainTabChanged
            }
        });
    },
    me.onMainTabChanged: function(oldTab, newTab, settings) {
        console.log("received");
        console.log(settings);
    }
});

Ext.define('MyApp.view.tab.List', {
    extend:'Ext.form.FieldSet',
    alias:'widget.mainTab',
    initComponent:function () {
        var me = this;
        me.title = 'App'
        me.items = me.createElements();
        me.addEvents(
            'mainTabChanged'
        );
        me.callParent(arguments);
    },

    createElements: function () {
        var me = this, tabs = [];
        tabs = [{
            title: 'Tab 1',
                bodyPadding: 10,
            html : 'A simple tab'
        },
        {
            title: 'Tab 2',
                html : 'Another one'
        }];
        var tabPanel = Ext.create('Ext.tab.Panel', {
            height: 150,
            activeTab: 0,
            plain: true,
            items : tabs,
            listeners: {
                beforetabchange: function(panel, newTab, oldTab) {
                    console.log("FIRED");
                    me.fireEvent('mainTabChanged', oldTab, newTab, 'Test');
                }
            }
        });
        return tabPanel;
    }
});

我认为问题是你的小部件"mainTab"是一个'List',但你正在从'tabpanel'触发事件。

在控制器中试试这个:

        me.control({
        'mainTab > tabpanel': {
            mainTabChanged: me.onMainTabChanged
        }

还是

        me.control({
        'tabpanel': {
            mainTabChanged: me.onMainTabChanged
        }

我的问题是,我试图注入一个应用程序到另一个。我现在已经解决了这个问题,没有注入应用程序,而是直接注入控制器和视图到应用程序中,从而使它们成为应用程序的原生部分,所以它们不会绕过事件总线。