camel0104 2010-09-26 17:03
浏览 345
已采纳

Extjs中实现类似iframe功能的问题

先看下图:

[img]http://dl.iteye.com/upload/attachment/316926/6eafef61-19f7-3e41-b86b-00b1ddabc127.jpg[/img]

[color=darkred][b]问题描述:[/b][/color]

[b]一.就是实现left菜单栏中不同模块对应的URL在center中展示
二.在网上看过很多关于Extjs与iframe的帖子:miframe.js这个似乎性能比较好(没办法对这一块不熟悉,望不吝指教),因此望给出结合miframe.js这个实现的实例[/b]

附上,我测试代码:
Ext.onReady(function() {
var contextPath = '/TestExt/';

        var topPanel = new Ext.Panel({
            region : 'north',
            height : 60,
            collapsible : false

// bodyStyle : 'background-image:url(' + contextPath +
// '/images/longbar.jpg);background-repeat:repeat;'
});

        var footPanel = new Ext.Panel({
                    region : 'south',
                    height : 20,
                    collapsible : false
                });

        var tbPanel = new Ext.TabPanel({
                    region : 'center',
                    plugins : new Ext.ux.TabCloseMenu(),
                    enableTabScroll : true,
                    activeTab : 0,
                    items : [{
                        title : ' 欢迎页面 ',
                        closable : false
                            // ,
                            // html : "<iframe src='"
                            // + contextPath
                            // + "/view/security/jsp/welcome.jsp' width =
                            // '100%' height = '100%' marginwidth=0
                            // marginheight=0 hspace=0 frameborder ='0'
                            // ></iframe>"
                        }]
                });

        // 生成菜单树
        var tree = new Ext.tree.TreePanel({
                    el : 'menu_tree',
                    rootVisible : true, // 隐藏根节点
                    // loader:new
                    loader : new Ext.tree.TreeLoader({
                                dataUrl : encodeURI('/TestExt/menu.do')
                            }),
                    region : 'west',
                    title : '菜单栏',
                    width : 180,
                    split : true,
                    minSize : 160,
                    maxSize : 220,
                    collapsible : true,
                    layout : 'fit'
                });

        // AsyncTreeNode 会延迟加载没有展开的节点 认为凡是leaf不为true的都要延迟加载
        var root = new Ext.tree.AsyncTreeNode({
                    text : '功能模块',
                    draggable : false,// false表示这个节点将不能被拖拽
                    // 树的根节点的ID设置成0有个好处就是初始化树的时候默认先加载父亲节点为0的孩子结点
                    id : '-1'
                });

        tree.setRootNode(root);

// tree.on('click',function(node,event){
// alert(node.id);
// });
root.expand();

        var viewport = new Ext.Viewport({
                    enableTabScroll : true,
                    layout : "border",
                    autoScroll : true,
                    items : [topPanel, tree, tbPanel,footPanel]
                });
    });

[color=darkred][b]注:[/b][/color]
千万别吝惜您代码,谢谢!

  • 写回答

1条回答 默认 最新

  • fireinjava 2010-09-26 21:39
    关注

    以前写的一个供你参考:
    实例化一个TabPanelInstance,然后在左树的node的Click事件中调用这个实例化对象tabpanel.addTab(...);

    [code="java"]
    TabPanelInstance = function() {
    var _this = this;
    _this.tabs = new Ext.TabPanel({
    activeTab : 0,
    border : false,
    enableTabScroll : true,
    region : 'center',
    defaults : {
    autoScroll : true
    },
    listeners :{'tabchange':function(){
    //if(_this.tabs.getActiveTab().title=='主页')
    }
    }
    });

    _this.addTab = function(title, url, id, closable,path) {
        if (document.getElementById(id + 'panel')) {
            _this.tabs.setActiveTab(id + 'panel');
            return;
        }
    
        var label = new Ext.form.Label({
            text : '所在位置:'+path
        });
        _this.tabs.add({
                    id : id + 'panel',
                    title : title,
                    iconCls : 'tabs',
                    tbar : [label],
                    contentEl : Ext.DomHelper.append(document.body, {
                                tag : 'iframe',
                                id : id,
                                style : "border 0px none;scrollbar:true",
                                src : url,
                                height : "100%",
                                width : "100%"
                            }),
                    closable : closable
                }).show();
    }
    
    _this.closeActiveTab = function(message) {
        if (null != message && "" != message) {
            Ext.Msg.show({
                        title : '处理结果信息',
                        msg : message,
                        buttons : Ext.MessageBox.OK,
                        fn : Ext.emptyFn,
                        icon : 'ext-mb-info',
                        fn : function() {
                            _this.tabs.remove(_this.tabs.getActiveTab());
                        }
                    });
        }else{
            _this.tabs.remove(_this.tabs.getActiveTab());
        }
    }
    

    }
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 QT6颜色选择对话框显示不完整
  • ¥20 能提供一下思路或者代码吗
  • ¥15 用twincat控制!
  • ¥15 请问一下这个运行结果是怎么来的
  • ¥15 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下