0

我正在尝试获取呈现为组件的 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 。

4

2 回答 2

1

如果要覆盖所有面板上的 onRender 函数,请执行以下操作:

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

        console.log('do something');
    }
});
于 2013-08-20T15:47:24.827 回答
0

确实,这已经坏了。问题是callParent这样的方法只适用于已经通过的方法Ext.define

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

Ext.panel.Panel.prototype.onRender.apply(this, arguments);
于 2013-08-20T09:42:48.590 回答