控制器的监听器捕捉来自其他视图的事件(面板点击)

Controller's listeners catching events (panel clicks) from other views

本文关键字:事件 其他 监听器 控制器 视图      更新时间:2023-09-26

我在ExtJS 4.2.1中遇到了这个奇怪的问题。

我有一个控制器,它的监听器从视图捕获不应该捕获的事件。

这里是控制器:

Ext.define('Customer_Portal_UI.controller.NavigationMenu', {
    extend: 'Ext.app.Controller',
    init: function () {
        this.control({
            'panel': {
                render: function (panel) {
                    panel.body.on('click', function (panel, e) {
                        alert('onclick');
                    });
                }
            }

        });
    }
});

它'控制'这个视图:

Ext.define('Customer_Portal_UI.view.NavigationMenu', {
    extend: 'Ext.form.Panel',
    alias: 'widget.navigationmenu',
    region: 'west',
    layout: 'fit',
    ui: 'cssmenu',
    loader: {
        autoLoad: true,
        url: '/resources/notloggedin.html'
    }
});

但是它也从这个视图捕获面板点击:

Ext.define("Customer_Portal_UI.view.MainContent", {
    extend: 'Ext.form.Panel',
    alias: 'widget.maincontent',
    region: 'center',
    layout: 'card',
    border: false,
    activeItem: 0,
    requires: ['Ext.grid.Panel'],
    initComponent: function () {
        this.items = [
                                {
                                    xtype: 'panel',
                                    title: ''
                                },
                                {
                                    xtype: 'gridpanel',
                                    id: 'contactlistgrid',
                                    store: Ext.data.StoreManager.lookup('contactStore'),
                                    columns: [
                    ....
                                    ],
                                    features: [{
                                        ftype: 'grouping',
                                        groupHeaderTpl: ['{columnName}: {name} - ({rows.length} employees)'],
                                        hideGroupedHeader: true,
                                        startCollapsed: false
                                    }],
                                    viewConfig: { id: 'contactlistgridview' }
                                },
                                {
                                    xtype: 'gridpanel',
                                    id: 'caselistgrid',
                                    store: Ext.data.StoreManager.lookup('caseStore'),
                                    columns: [
                                                { text: 'Title', dataIndex: 'title' },
                                                { text: 'Description', dataIndex: 'description' },
                                                { text: 'Ticket number', dataIndex: 'ticketnumber' }
                                    ],
                                    viewConfig: { id: 'caselistgridview' }
                                }
                ]

        this.callParent(arguments);
    }
});

你能看出为什么它会这样做吗?panel确实是我点击的面板,而不是文档主体,这可以解释为什么。

注意,这是在不捕获点击从其他面板,只是从MainContent视图,它不应该…

谢谢。

修复方法如下所示:

http://www.fusioncube.net/index.php/sencha-extjs-4-make-any-component-fire-a-click-event/comment-page-1

然后我就可以在我的控制器中监听'click' for 'panel'(视图中只有一个panel),而无需改进我的选择器