ExtJS如何覆盖onRender以便我可以获得正确的组件?

时间:2013-08-20 09:09:49

标签: extjs render onrender

我正在尝试获取作为组件呈现的div的大小。

Ext.define('EDS.view.selector.Container', {
    extend: 'Ext.panel.Panel',
    alias : 'widget.selectorcontainer',

    layout: 'fit',

    initComponent: function(){

        this.items = [
                {
                    xtype: 'tabpanel',
                    defaults: {
                        bodyPadding: 10
                    },
                    layout: 'fit',
                    items:[
                         {
                             title: 'Organization',
                             id: 'selector-organization',
                             tag: 'div',                             
                             html: 'div here',
                             height: '100%',

                            onRender: function(){

                                //// Render D3
                                // Selector
                                console.log("onRender");
                                console.log(this.height);
                                console.log(this.width);

                                var divId = Ext.getCmp('selector-organization').id + "-body";
                                var divHeight = Ext.get(divId).getHeight();
                                var divWidth = Ext.get(divId).getWidth();
                                console.log(divHeight);
                                console.log(divWidth);
                                renderSelectorOrgView(divId, divHeight, divWidth);   

                                this.callParent();
                             },
......
......

这个onRender函数会中断正常的渲染过程。整个布局已损坏,div(#selector-organization-body)非常小。所以我想知道我是否以错误的方式压倒onRender。

2 个答案:

答案 0 :(得分:1)

如果要覆盖所有Panel上的onRender功能,请执行以下操作:

Ext.override(Ext.tab.Panel, {
    onRender: function() {
        this.callParent();

        console.log('do something');
    }
});

答案 1 :(得分:0)

确实,那已经破了。问题是callParent和此类方法仅适用于已通过Ext.define的方法。

您可以通过使用当前范围和参数调用父方法来自己模拟callParent。在您的情况下,请使用以下行替换this.callParent()(顺便提到缺少参数):

Ext.panel.Panel.prototype.onRender.apply(this, arguments);