【问题标题】:Panel VBOX does not render items面板 VBOX 不渲染项目
【发布时间】:2014-12-14 22:57:06
【问题描述】:

正如标题所暗示的,我有一个面板,它将执行 onRender 命令来添加项目,如下面的代码,一个树形面板。我将 treepanel 包裹在布局 - 边框中,然后在 vbox 面板上放置在西部区域。不幸的是,整个树面板没有渲染。我检查了 HTML,元素在那里,但它们有点被禁用,因为元素在萤火虫中具有模糊的字体。为什么这样做?请帮忙。

Ext.define('anr.panels.report', {
    extend          : 'Ext.panel.Panel',
    pageLimit       : 15,
    title           : 'Report Generator',
    layout          : 'border',
    border          : false,
    frame           : true,

    initComponent: function() {

        this.callParent(arguments);
    },

    onRender:function() {

        var me = this;

        var store = Ext.create('Ext.data.TreeStore', {
            root: {
                expanded: true,
                children: [
                    { text: "detention", leaf: true },
                    { text: "homework", expanded: true, children: [
                        { text: "book report", leaf: true },
                        { text: "algebra", leaf: true}
                    ] },
                    { text: "buy lottery tickets", leaf: true }
                ]
            }
        });

         var reportItem = {
            xtype: 'panel',
            layout: 'vbox',
            id:'westpanel',
            region:'west',
            width: 350,
            height: 300,
            minSize: 350,
            maxSize: 350,
            border: false,
            split: true,
            margin: '1 0 5 1',
            items: [
                {
                    border: false,
                    layout: 'border',
                    items:[
                        {
                            xtype: 'treepanel',
                            height: 250,
                            width: 200,
                            store: store,
                            id: 'menu-panel',
                            frame: false,
                            rootVisible: false
                        }
                    ]
                }
            ]
        };

        this.add(reportItem);
        this.callParent(arguments);
    }
});

【问题讨论】:

    标签: extjs extjs4 border-layout treepanel vbox


    【解决方案1】:

    我不太确定您为什么要使用 onRender 方法而不是将面板放置在项目中,但那里有太多错误。

    每个边框面板都需要高度、宽度或弹性,并且需要有一个带有中心区域的面板。

    如果你把你的代码改成这个,它会起作用,但要小心所有这些嵌套面板,你好像迷路了。

    代码

    var store = Ext.create('Ext.data.TreeStore', {
        root: {
            expanded: true,
            children: [{ 
                text: "detention", leaf: true 
            },{
                text: "homework", expanded: true, 
                children: [{
                    text: "book report", leaf: true 
                },{
                    text: "algebra", leaf: true
                }]
            }, { 
                text: "buy lottery tickets", 
                leaf: true 
            }]
        }
    });
    
    Ext.define('anr.panels.report', {
        extend : 'Ext.panel.Panel',
        width: 800,
        height: 400,
        border: true,
        title : 'Report Generator',
        layout : 'border',            
        items: [{
            xtype: 'panel',
            layout: 'vbox',
            region:'west',
            width: 350,
            height: 300,
            minSize: 350,
            maxSize: 350,
            border: false,
            split: true,
            margin: '1 0 5 1',
            items: [{
                xtype: 'panel',
                border: false,
                layout: 'border',
                flex: 1,
                width: 350,
                items:[{
                    xtype: 'treepanel',
                    height: 250,
                    width: 200,
                    store: store,
                    id: 'menu-panel',
                    region: 'center',
                    frame: false,
                    rootVisible: false
                }]
            }]
        },{
            xtype : 'panel',
            region: 'center'
        }]
    
    });
    
    Ext.create('anr.panels.report',{
        renderTo: Ext.getBody()
    });
    

    【讨论】:

    • 是的,你的权利,它只需要一个高度和宽度配置。我一定是困了。我使用了onRender,因为这是我习惯的。我不知道这是否可取。到底是哪一个?顺便谢谢你的回答。
    • 当您需要在添加面板之前运行某些函数和操作数据时,通常会覆盖 onRender 方法。但即便如此,我也会使用渲染侦听器来保持它的组织性。如果您在那里没有做任何事情,也不需要重写 initComponent 方法来执行 callParent 。 :)
    猜你喜欢
    • 2020-09-17
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 2011-12-18
    • 2021-03-21
    • 1970-01-01
    • 2016-01-10
    • 2020-03-29
    相关资源
    最近更新 更多