【问题标题】:extjs 4 portal exampleextjs 4 门户示例
【发布时间】:2011-08-27 00:51:42
【问题描述】:

我想说,我很难理解 ExtJS 4 中的门户演示。有人可以给我提供一个容器的通用示例以及如何添加一个 portlet 项。当我进行搜索时,下载提供的文档没有门户或 portlet 这个词。当我查看示例的源代码时,还有类文件和额外的 CSS 文件。需要那些吗?我在网上搜索过,似乎只发现其他人问同样的问题。非常感谢任何帮助甚至是 extjs 4 演示的链接。也许我的 googlefoo 缺少?

当我使用演示并开始修改边框布局时,我遇到了各种各样的问题。中心区域不能包含选项卡面板,我对东部、西部和北部区域使用手风琴布局。西部地区似乎存在问题,并且有手风琴布局,因为它不能正确显示,即。手风琴就像半开,里面的任何图像都不会显示,除非你折叠然后重新打开。有人可以为我提供一个示例,该示例仅说明如何在没有任何附加功能的情况下制作基本门户吗?下面是我使用的代码,它不能正常工作,但在仅使用视口时显示和工作正常(门户部分除外)。

这是一些示例代码

Ext.define('Ext.app.Portal', {

    extend: 'Ext.container.Viewport',

    uses: ['Ext.app.PortalPanel'],

    initComponent: function(){
        Ext.apply(this, Ext.create('Ext.Viewport', {
            id: 'main-viewport',
            layout: {
                type: 'border',
                padding: '0 5 5 5'
            },
            items: [{
                title: 'My Notifications',
                id: 'My-Notifications-Panel',
                region: 'north',
                height: 300,
                split: true,
                collapsible: true,
                collapsed: true,
                margins: '0 0 0 0',
                layout: 'accordion',
                items: [
                {
                    title: 'Alerts'
                },{
                    title: 'Communications'
                }
                ]
            },{
                title: 'My Support',
                id: 'My-Support-Panel',
                region: 'east',
                width: 140,
                collapsible: true,
                collapsed: true,
                margins: '0 0 0 0',
                layout: 'column',
                autoScroll: true,
                defaults: {
                    margins: '10 5 0 0',
                    xtype: 'panel',
                    height: 100,
                    width: '100%',
                    headerPosition: 'bottom',
                    border: false,
                    cls: 'myicon',
                    bodyStyle: 'background-image: url(images/icon.png); background-repeat: no-repeat; background-position: center;'
                },
                items:[
                    {
                        title: 'Customer Services'
                    },{
                        title: 'Technical Support',
                        listeners: {
                            afterrender: function(c){
                                c.el.on('click', function(){
                                    CreateChatSession();
                                    Ext.getCmp('My-Support-Chat-Panel').update('<iframe width="100%" height="700" src="/pub/" frameborder="0"></iframe>');
                                });
                            }
                        }
                    }
                ]
            },{
                xtype: 'panel',
                region: 'west',
                collapsible: true,
                collapsed: true,
                title: 'My Apps',
                width: 275,
                layout:'accordion',
                split: true,
                margins: '0 0 0 0',
                defaults: {
                    bodyStyle: 'padding:15px',
                    layout: 'column'
                },
                items: [{
                    title: 'Internal Apps',
                    defaults: {
                        padding: '5 5 5 5',
                        xtype: 'panel',
                        height: 100,
                        width: 80,
                        headerPosition: 'bottom',
                        border: false,
                        cls: 'myicon',
                        bodyStyle: 'background-image: url(images/icon.png); background-repeat: no-repeat; background-position: center;'
                    },
                    items: []
                },{
                    title: 'Favorites',
                    defaults: {
                        padding: '5 5 5 5',
                        xtype: 'panel',
                        height: 100,
                        width: 80,
                        headerPosition: 'bottom',
                        border: false,
                        cls: 'myicon',
                        bodyStyle: 'background-image: url(images/icon.png); background-repeat: no-repeat; background-position: center;'
                    },
                    items: []
                },{
                    title: 'Reporting',
                    defaults: {
                        padding: '5 5 5 5',
                        xtype: 'panel',
                        height: 100,
                        width: 80,
                        headerPosition: 'bottom',
                        border: false,
                        cls: 'myicon',
                        bodyStyle: 'background-image: url(images/icon.png); background-repeat: no-repeat; background-position: center;'
                    },
                    items: []
                }]
            },
                Ext.create('Ext.tab.Panel', {
                    region: 'center',
                    layout: 'fit',
                    items: [{
                        id: 'Workspace-1',
                        title: 'Workspace 1',
                        layout: 'fit',
                        items: [{
                            id: 'app-portal',
                            xtype: 'portalpanel',
                            region: 'center',
                            items: [{
                                id: 'col-1',
                                items: [{
                                    id: 'portlet-2',
                                    title: 'Portlet 2',
                                    listeners: {
                                        'close': Ext.bind(this.onPortletClose, this)
                                    }
                                }]
                            },{
                                id: 'col-2',
                                items: [{
                                    id: 'portlet-3',
                                    title: 'Portlet 3',
                                    listeners: {
                                        'close': Ext.bind(this.onPortletClose, this)
                                    }
                                }]
                            }]
                        }]
                    }]
                })
            ]
        }));
        this.callParent(arguments);
    }
});

【问题讨论】:

  • 该示例中的源代码将准确地向您展示他们是如何完成他们所做的事情的。也许如果您可以将您的问题更具体一点,那么有人可以提供更多帮助。
  • 我已经编辑了我的问题并添加了示例代码

标签: javascript extjs extjs4 portal


【解决方案1】:

----------- 仅供阅读此 Portal Layout 的任何人使用,它不是官方框架的一部分,而是与库捆绑在一起的第 3 方扩展,这就是它不在文档中的原因。

【讨论】:

    【解决方案2】:

    这是在中心区域带有标签的门户示例

    希望这会对你有所帮助。

    Ext.define('Ext.app.Portal', {
    
        extend: 'Ext.container.Viewport',
    
        getTools: function() {
            return [{
                xtype: 'tool',
                type: 'gear',
                handler: function(e, target, panelHeader, tool) {
                    var portlet = panelHeader.ownerCt,
                        el = portlet.getEl();
    
                    el.mask('Working...');
                    Ext.defer(el.unmask, 2000, el);
                } //eo handler function
            }]; //eo return
        }, //eo get tools
    
        initComponent: function() {
    
            var content = '<div class="portlet-content">' + Ext.example.shortBogusMarkup + '</div>';
    
            Ext.apply(this, {
                id: 'app-viewport',
                layout: {
                    type: 'border',
                    padding: '0 5 5 5'
                }, //eo layout
                items: [{ //header : item 1 of app-viewport
                        id: 'app-header',
                        xtype: 'box',
                        region: 'north',
                        height: 50,
                        html: 'myPortal'
                    },
                    { //container : item 2 of app-viewport
                        xtype: 'container',
                        region: 'center',
                        layout: 'border',
                        items: [{ //options: item 1 of container
                                id: 'app-options',
                                title: 'Options',
                                region: 'west',
                                animCollapse: true,
                                width: 200,
                                minWidth: 150,
                                maxWidth: 400,
                                split: true,
                                collapsible: true,
                                layout: 'accordion',
                                layoutConfig: {
                                    animate: true
                                },
                                items: [{ //item 1 of app-options
    
                                        title: 'title',
                                        autoScroll: true,
                                        border: false,
                                        iconCls: 'nav',
                                        items: [{
                                            xtype: 'treepanel',
                                            useArrows: true,
                                            autoScroll: true,
                                            animate: true,
                                            enableDD: true,
                                            containerScroll: true,
                                            border: false,
                                            region: 'west',
                                            split: true,
    
                                            listeners: {
                                                click: function(n) {
                                                    Ext.Msg.alert('Navigation Tree Click', 'You clicked: "' + n.attributes.text + '"');
                                                }
                                            }
                                            /*Dashboard
                                            MultiServices
                                            Reporting
                                            Global Options
                                            */
                                        }]
    
                                    },
                                    { //settings : item 2 of app-options
                                        title: 'Settings',
                                        html: '<div class="portlet-content">' + 'details ??' + '</div>',
                                        border: false,
                                        autoScroll: true,
                                        iconCls: 'settings'
                                    }
                                ] //eo items options
                            },
                            { //item 2 of container
                                id: 'tabpanel1', // id: 'app-portal',  ???
                                xtype: 'tabpanel',
                                activeTab: 0,
                                region: 'center',
                                items: [{
                                    title: 'tab1',
                                    layout: 'column', //
                                    closable: true,
                                    items: [{
                                        id: 'col-1',
                                        columnWidth: 0.5,
                                        flex: 1,
                                        items: [{
                                            id: 'portlet-1',
                                            title: 'Grid Portlet',
                                            tools: this.getTools(),
                                            items: new Ext.app.GridPortlet(),
                                            listeners: {
                                                'close': Ext.bind(this.onPortletClose, this)
                                            }
                                        }, {
                                            id: 'portlet-2',
                                            title: 'Portlet 2',
                                            tools: this.getTools(),
                                            html: content,
                                            listeners: {
                                                'close': Ext.bind(this.onPortletClose, this)
                                            }
                                        }] //eo col-1
                                    }, {
                                        id: 'col-2',
                                        columnWidth: 0.5,
                                        flex: 1,
                                        items: [{
                                            id: 'portlet-3',
                                            title: 'Portlet 3',
                                            tools: this.getTools(),
                                            html: '<div class="portlet-content">' + Ext.example.bogusMarkup + '</div>',
                                            listeners: {
                                                'close': Ext.bind(this.onPortletClose, this)
                                            }
                                        }] //eo col-2
                                    }, {
                                        id: 'col-3',
                                        columnWidth: 0.5,
                                        flex: 1,
                                        margins: '0 26 0 0',
                                        items: [{
                                            id: 'portlet-4',
                                            title: 'Chart Portlet',
                                            tools: this.getTools(),
                                            items: new Ext.app.ChartPortlet(),
                                            listeners: {
                                                'close': Ext.bind(this.onPortletClose, this)
                                            }
                                        }] //eo col-3
                                    }] //eo tab1
                                }, {
                                    title: 'tab2',
                                    closable: true
                                }] //eo items tabpanel
                            }
                        ] //eo ietms container
    
                    }
                ] //eo viewport
            }); //eo apply
    
            this.callParent(arguments);
        }, //eo initcomponent
    
        onPortletClose: function(portlet) {
            this.showMsg('"' + portlet.title + '" was removed');
        },
    
        showMsg: function(msg) {
            var el = Ext.get('app-msg'),
                msgId = Ext.id();
    
            this.msgId = msgId;
            el.update(msg).show();
    
            Ext.defer(this.clearMsg, 3000, this, [msgId]);
        },
    
        clearMsg: function(msgId) {
            if (msgId === this.msgId) {
                Ext.get('app-msg').hide();
            }
        }
    });
    

    编辑

    或者你可以试试this example我认为它更适合你的需求,请告诉我。

    【讨论】:

    • 由于某种原因,当这个渲染时,所有面板都不可拖动并且没有选项卡。这对你有用吗?
    • 是的,它对我有用,但你的权利不可拖动,我还没有解决这个问题。
    • 如果你真的需要选项卡并且无法解决我的示例中的问题,请尝试查看 sencha 示例,我确定我看到了与门户网站类似的示例,但有选项卡,但不记得它的名称
    • 我已经为此工作了 2 周。我已经筋疲力尽了。我通常尽量不要在这里问太多,除非我似乎无法弄清楚一些事情
    • 我明白这一点,我一直处于同样的情况(也许仍然如此),几个月前才开始使用 extjs4
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多