`
xuxingyin
  • 浏览: 48496 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

ExtJs非Iframe框架加载页面实现 解决自适应高度

 
阅读更多
最近开发项目用到ext,不想使用iframe,在参考了大量文章以后使用eval的方式,来模块化js代码,实现框架页

主页面的js代码 main.js

// 页面加载开始

// 定义一个锁屏的遮罩 因为树菜单是异步读取的

var myMask_info = "加载数据中,请稍后...";

var myMask = new Ext.LoadMask(Ext.getBody(), {msg:myMask_info});

// 模块的数组 用来缓存模块function的

var moduleArray = {};

Ext.onReady( function() {

Ext.QuickTips.init();

// 加载锁屏 loadmask 

myMask.show();

// 动态获取树节点 这里ajax使用的是dwr(直接输出json数据) 异步加载使用的是第三方的DWRTreeLoader

var dwrloader = new Ext.ux.DWRTreeLoader({

        dwrCall:AsyncMainSev.getUserFuncTreeJSON

      });

 

// 主页面上初始化一个Tab面板

var contentPanel = new Ext.TabPanel({  

region:'center',  

enableTabScroll:true,  

activeTab:0,  

items:[{  

id:'homePage',  

title:'首页',  

autoScroll:true,

closable:true,  

html:'<iframe id="frame_main" src="pages/main/child1.html" mce_src="pages/main/child1.html" width="100%" height="400" frameborder="0" scrolling="auto"></iframe>'  

}]  

}); 

 

var _tree = new Ext.tree.TreePanel({

        id:'forum-tree',

        region:'west',

        title:'功能菜单',

        split:true,

        width: 325,

        minSize: 175,

        maxSize: 400,

        collapsible: true,

        margins:'0 0 5 5',

        rootVisible:false,

        lines:false,

//   selModel: new Ext.tree.MultiSelectionModel(),

        autoScroll:true,

        loader: dwrloader,

        root: new Ext.tree.AsyncTreeNode({text:'root',hasChildren:true,id: '0'})

        /*listeners: {

       'checkchange': function(node, checked){

           if(checked){

               node.getUI().addClass('complete');

           }else{

               node.getUI().removeClass('complete');

           }

       }

     }*/

    });

    //加载完成事件 隐藏掉锁屏loadmask

_tree.addListener("load",function(){myMask.hide();});

/**以下代码用来给叶子节点添加事件**/

var tree = Ext.getCmp('forum-tree');

/*

var sm = tree.getSelectionModel();

sm.on('selectionchange', function(sm, node){

//console.log(node.attributes.attributes.url);

// 测试iframe的方式 而注释掉

var n = contentPanel.getComponent(node.id);  

        if (!n) { ////判断是否已经打开该面板  

            n = contentPanel.add({  

                'id':node.id,  

                'title':node.text,  

                closable:true,  

                autoLoad:{url:node.attributes.attributes.url, scripts:true} //通过autoLoad属性载入目标页,如果要用到脚本,必须加上scripts属性  

            });  

        }  

        contentPanel.setActiveTab(n); 

var n = contentPanel.getComponent(node.id);

if(!n){

n = contentPanel.add({ 

id:node.id,  

title:node.text,  

autoScroll:true,

closable:true,  

html:'<iframe id="frame_main" src="' + node.attributes.attributes.url + '" mce_src="' + node.attributes.attributes.url + '" width="100%" height="400" frameborder="0" scrolling="auto"></iframe>'

});

}

contentPanel.setActiveTab(n);

    });

*/

 

// 10-03-02 再次修改为tree.on方法 取消原来的在selectionmodel上做

/*

tree.on('click', function(node){

        // 如果是叶子节点

if ( node.isLeaf() ){

// 得到节点对象Ext.tree.TreeNode

var n = contentPanel.getComponent(node.id);

// 如果不存在 在TabPanel上添加一个tab 挂载iframe页面

if(!n){

n = contentPanel.add({ 

id:node.id,  

title:node.text,  

autoScroll:true,

closable:true,  

html:'<iframe id="frame_main" src="' 

+ node.attributes.attributes.url 

+ '" mce_src="' 

+ node.attributes.attributes.url 

+ '" width="100%" height="400" frameborder="0" scrolling="auto"></iframe>'

});

}

// 激活

contentPanel.setActiveTab(n);

}

});

*/

// 10-03-15 再次修改  实验性修改为之加载外部文件js 不使用框架页了

tree.on('click', function(node){

myMask.show();

var nodeattr = node.attributes.attributes;

        // 如果是叶子节点

if ( node.isLeaf() ){

// 获取这个模块的id

var moduleId = nodeattr.module_name;

var n = contentPanel.getComponent(moduleId);

// 如果不存在 在TabPanel上添加一个tab id为模块的id

if(!n){

// 如果数组里初始化过此module

if( moduleArray[moduleId] != undefined ){

var module = moduleArray[moduleId];

var moduleInstance = new module();

var outCmp =  contentPanel.add(moduleInstance);

contentPanel.setActiveTab(outCmp);

myMask.hide();

}else{

//  ajax请求 来eval一段module的代码 并执行 然后加到tabpanel上

Ext.Ajax.request({

method: 'GET',

url: nodeattr.js_source,

success: function(response){

var module = eval(response.responseText);

moduleArray[moduleId] = module;

var moduleInstance = new module();

var outCmp =  contentPanel.add(moduleInstance);

contentPanel.setActiveTab(outCmp);

myMask.hide();

}

});

}

}

// 获取js代码的绝对路径

}

});

 

// 开始渲染整个面板  并整合定义好的tree和TabPanel组建

var viewport = new Ext.Viewport( {

layout : 'border',

items : [ {

xtype: 'box',

region: 'north',

height: 30

},

_tree, 

contentPanel

]

});

});

 

 

 

 

 


来自:http://hi.baidu.com/wastorode/blog/item/fdfd37aca0b588a3ca130c7a.html

分享到:
评论

相关推荐

    Extjs6-iframe-优化.rar

    在IT行业中,ExtJS是一个广泛使用的JavaScript框架,用于构建企业级的富客户端应用程序。这个名为"Extjs6-iframe-优化.rar"的压缩包文件似乎包含了一个针对ExtJS6的特定插件——IFrame.js的优化方案。IFrame,全称...

    ExtJS + Iframe方式 的 管理界面的框架

    此框架,使用的是EXTJS,主要适合于后台的管理界面和内部使用的管理系统布局。 适用于美工不好,又比较懒的人...根据我自己的需要,结合性能方面的考虑,我使用的是iframe的浏览方式,内部的功能页面,均不使用EXTJS。

    extjs中Ext.Panel和TreePanel 组件动态加载本地页面数据

    这篇文章将探讨如何在这些组件中动态加载本地页面数据,以提升用户体验并实现灵活的数据展示。 首先,`Ext.Panel`是一个可配置的容器,它可以包含其他组件,如按钮、表格、表单等。它提供了丰富的布局管理,如`fit`...

    ExtJS 实现动态处理加载 grid 实现了CRUD还有分页功能

    在本示例中,我们将深入探讨如何使用ExtJS实现动态加载grid,同时实现CRUD(创建、读取、更新、删除)操作和分页功能。 首先,让我们了解什么是Grid。在ExtJS中,Grid是一种数据网格组件,用于展示大量结构化数据。...

    Extjs web 开发框架

    Extjs框架Extjs框架Extjs框架Extjs框架Extjs框架Extjs框架Extjs框架Extjs框架Extjs框架

    ExtJS构造动态异步加载

    本文将深入探讨如何使用ExtJS构建动态异步加载的树形结构,结合AJAX技术实现JSON数据的高效传输。 首先,我们要理解什么是动态异步加载。在传统的网页开发中,如果一次性加载所有数据,可能会导致页面加载速度慢,...

    ext使用--Panel和iframe联合使用时页面高度的解决方法

    本文将深入探讨如何在使用ExtJS时解决Panel与IFrame结合时页面高度自动适应的问题。 首先,我们需要了解`Panel`在ExtJS中的角色。Panel是容器组件,它可以包含其他组件,如按钮、表格、表单等。Panel有自己的布局...

    extjs4.2目录框架

    【标题】"extjs4.2目录框架"指的是基于Ext JS 4.2版本构建的前端用户界面框架,用于组织和展示应用程序的目录结构。在Web应用开发中,目录框架通常用于提供清晰的导航和组织复杂的业务逻辑。Ext JS是一个强大的...

    采用ssh+Extjs3.0实例框架luogou项目

    在Luogou项目中,这些组件被用来构建用户界面,与后端通过AJAX进行异步通信,实现了数据的动态加载和实时更新。 5. **数据库SQLServer**:作为数据存储,SQLServer提供了稳定、高效的数据库服务。在Luogou项目中,...

    Extjs 动态加载树

    动态加载树(Dynamic Loading Tree)是指在用户滚动或展开树节点时,仅加载当前需要显示的数据,而非一次性加载所有数据,这有助于提高页面性能和用户体验。 在描述中提到的博客链接可能提供了一个实现动态加载树的...

    Extjs4后台框架

    这个“Extjs4后台框架”可能指的是一个特定的、与ExtJS4集成的后端解决方案,用于支持前端应用的数据交互和管理。让我们深入探讨一下ExtJS4及其相关的后台开发概念。 首先,ExtJS4提供了丰富的组件库,包括表格、...

    Extjs4.1 系统框架 集成权限操作流程和页面

    ExtJS 4.1 是一个强大的JavaScript 框架,专为构建富客户端Web应用程序而设计。这个系统框架集成了完善的权限控制功能,允许开发者在应用程序中实现细致的用户访问控制,确保数据的安全性和用户的隐私。下面将详细...

    extjs4.0 实现了主页面框架 动态菜单 例子 表单 ajax

    extjs4.0 实现了主页面框架(主框架使用Ext.Viewport,banner使用Ext.panel.Panel,通过toolbar来放置按钮),包括左侧动态菜单实现(采用Ext.tree.Panel)动态从数据库加载数据来显示菜单(后台代码也在了通过json...

    extjs实现动态树加载菜单

    ExtJS 是一个强大的JavaScript 框架,用于构建富客户端应用程序。它提供了丰富的组件库,包括数据绑定、布局管理、图表以及我们今天要讨论的重点——动态树形菜单。动态树加载菜单是 ExtJS 中一种常见且实用的功能,...

    ExtJS_MVC框架的搭建实例

    ### ExtJS_MVC框架的搭建实例 #### 一、引言 随着Web应用的发展,越来越多的企业选择使用MVC架构来构建复杂的应用系统。其中,ExtJS作为一种强大的客户端框架,能够帮助开发者快速构建出美观且功能丰富的用户界面。...

    extjs tree 异步加载树型

    ExtJS Tree 是一个基于 ExtJS 框架的组件,用于构建可交互的、层级结构的树形控件。在 Web 开发中,它经常被用来展示目录结构、组织架构或者复杂的分类数据。异步加载树型是 ExtJS Tree 的一个重要特性,允许只在...

    extjs6.6框架的web项目(登录+首页)

    EXTJS 6.6 框架是一款强大的前端开发工具,尤其适合构建企业级的Web应用程序。这个项目是一个基于EXTJS 6.6的Web应用实例,提供了完整的登录页面和首页布局,包括左侧菜单和列表展示。以下是关于EXTJS 6.6框架以及该...

    extjs 简单框架搭建

    EXTJS是一种基于JavaScript的富客户端应用开发框架,由Sencha公司开发。它提供了一套完整的组件模型、数据绑定机制、事件处理系统以及丰富的用户界面组件,使得开发者可以构建出功能强大的Web应用程序。EXTJS框架...

    ExtJs 登陆框、框架

    在C#开发环境中,ExtJS 可以作为前端技术与后端的C#服务进行交互,实现数据的动态加载和展示。 在“C# Extjs 登陆框、框架”这个主题中,我们主要关注的是如何使用ExtJS创建一个登录界面,并结合C#后端实现用户验证...

    ExtJs-3.3.1框架

    标题“ExtJs-3.3.1框架”指的是这个版本的ExtJS框架,该框架具有高度可定制性和灵活性。 1. **换肤机制**:ExtJS 3.3.1支持皮肤更换,允许用户根据需求调整应用程序的外观和风格。这通常是通过CSS样式和主题实现的...

Global site tag (gtag.js) - Google Analytics