控制器的侦听器从其他视图中捕获事件(面板单击)

时间:2014-06-06 17:43:08

标签: javascript extjs4

我对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视图中捕获来自其他面板的点击,它不应该...

感谢。

1 个答案:

答案 0 :(得分:0)

修复程序有两处,如下所示:

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

然后我能够在我的控制器中收听“面板”的'click'(视图中只有一个面板),而无需优化我的选择器。