8

我得到了tabpanel- 它是main表单(视图)。在此tabpanel我定义了不同的选项卡 - xtype:'panel'

所以,我有一个main(控制器)、main视图和一些选项卡视图。选项卡的视图在视图中被引用main

我想在控制器中定义activate一些孩子的事件监听器。panelmain

我怎样才能做到这一点?

main控制器:

Ext.define('KP.controller.account.apartment.Main', {
    extend: 'Ext.app.Controller',

    views: ['account.apartment.Main',
        'account.apartment.Requisites'
    ],

    models: ['account.apartment.Requisites'
    ],
    stores: ['account.apartment.Requisites'
    ],


    init: function () {

    }
});

main观点:

Ext.define('KP.view.account.apartment.Main', {
    extend: 'Ext.window.Window',
    alias: 'widget.ApartmentData',

    height: 566,
    width: 950,
    activeItem: 0,
    layout: {
        type: 'fit'
    },
    autoShow: false,

    initComponent: function() {
        var me = this;

        Ext.applyIf(me, {            
            items: [
                {
                    xtype: 'tabpanel',
                    activeTab: 0,
                    deferredRender: true, 

                    items: [                        

                        {
                            xtype: 'RequisitesApartment'
                        }
                    ]
                }
            ]
        });

        me.callParent(arguments);
    }

});

panelRequisitesApartment(查看):

Ext.define('KP.view.account.apartment.Requisites', {
    extend: 'Ext.panel.Panel',
    alias: 'widget.RequisitesApartment',


    id: 'panel_accountrequisites',
    height: 350,
    width: 1124,
    autoScroll: true,
    layout: {
        type: 'fit'
    },


    listeners: {
        activate: function () {           
               ....load data....
               ...this listeners I want to push in 'main' controller...            
        }
    },

    initComponent: function () {
        var me = this;

        var grid_store = Ext.create('KP.store.account.apartment.Requisites');

        Ext.applyIf(me, {
            dockedItems: [
                {
                    xtype: 'gridpanel',
                    height: 260,
                    autoScroll: true,
                    dock: 'bottom',
                    store: grid_store,
                    id: 'r_gridFlatParams',
                    forceFit: true,


                    columns: [
                        ...some columns....
                    ],
                    viewConfig: {
                }
            }
            ]
        });

        me.callParent(arguments);
    }
});
4

3 回答 3

7

将其直接注册为责任控制器中的控件

这是一个带有工作查询的示例。当然,您只需要查询,但我认为这是一个很好的例子。自定义 cfg 属性 ident 可以轻松找到每个选项卡。在下面的示例中,您将在每个面板中指定一个 tabConfig 并在那里定义标识。

Ext.create('Ext.tab.Panel', {
    width: 400,
    height: 400,
    renderTo: document.body,
    items: [{
        title: 'Foo',
        tabConfig: {
            ident: 'foo'
        },
    }, {
        title: 'Bar',
        tabConfig: {
            ident: 'bar',
            title: 'Custom Title',
            tooltip: 'A button tooltip'
        }
    }]
});

console.log(Ext.ComponentQuery.query('tabpanel tabbar tab[ident=foo]')[0]);
console.log(Ext.ComponentQuery.query('tabpanel tabbar tab[ident=bar]')[0]);

另一种方法是使用可以查询的 css id,'#my-name'但我建议使用自定义的,如上面的示例

于 2012-09-21T08:21:41.053 回答
3

好吧,我应该把这段代码放在'main'(控制器)中:

 this.control({
        'ApartmentData tabpanel RequisitesApartment': {
            activate: function () {
                console.log('hello!');                
            }
        }
    });

问题出在我使用的错误选择器中。正确的选择器是:

 'ApartmentData tabpanel RequisitesApartment'

有'ApartmentData'(定义为a alias: 'widget.ApartmentData') - 是'window' xtype - 主要形式。tabpanel - 在“窗口”中带有选项卡的面板,以及“apartServList”(定义类似alias: 'widget.RequisitesApartment') - 一些面板。

谢谢

于 2012-09-21T11:00:46.843 回答
0

正确的做法是将配置对象传递给成员函数控件控制器 初始化函数中。来自 Sencha 文档:控制函数可以轻松地监听视图类上的事件并使用处理函数执行一些操作。

直接来自 extjs 文档的简单示例:

Ext.define('MyApp.controller.Users', {
extend: 'Ext.app.Controller',

init: function() {
    this.control({
        'viewport > panel': {
            render: this.onPanelRendered
        }
    });
},

onPanelRendered: function() {
    console.log('The panel was rendered');
}
});

希望这可以帮助。干杯

于 2012-09-21T08:38:46.577 回答