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

ext单页面实现框架页

 
阅读更多

最近开发项目用到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

 

 

 

分享到:
评论

相关推荐

    Ext4+JSON+Servlet+Tree构建Web应用框架

    在构建Web应用框架时,"Ext4+JSON+Servlet+Struts2+Ext.tree.Panel+Ext.tab.Panel"的组合提供了一种高效且功能丰富的解决方案。这个框架的核心组件包括Ext4 JavaScript库、JSON数据交换格式、Servlet或Struts2作为...

    MVC+EF+EXT框架源码

    这个项目的核心是将这三个技术融合,创建一个功能完备的单页面应用程序(SPA)。 **MVC(Model-View-Controller)框架** MVC是一种设计模式,常用于Web应用开发,用于分离业务逻辑、数据模型与用户界面。在.NET ...

    ext+ssi框架集成系统

    EXT+SSI框架集成系统的实现,旨在充分利用两者的优势,将EXT.js的前端交互性和界面设计能力与SSI的服务器端动态处理能力相结合。这通常意味着开发者可以在EXT.js构建的前端界面上利用SSI来实现部分内容的动态插入和...

    OA+Ext集成框架源代码

    6. **前端路由**:利用Ext JS的路由机制,可以实现页面间的导航,同时方便URL与应用状态的对应。 7. **Ajax通信**:大部分交互是通过Ajax异步请求完成的,这保证了用户界面的流畅性,不会因为等待服务器响应而阻塞...

    Ext自定义布局框架扩展

    Ext页面框架布局,只需提供菜单数据,然后配置一下周边区域对象即可。菜单数据格式如下:var tempDataArray = [ { id: 'uaMgtTree', text: 'UA模块管理', items: [ { id: 'ticketMgtRoot', text: '凭证...

    EXT例子,可以直接跑

    1. EXT组件:EXT提供了丰富的组件库,例如`GridPanel`用于数据展示,`FormPanel`用于数据输入,`TabPanel`实现多标签页,`Window`用于弹出对话框,`Toolbar`提供操作按钮,`TreePanel`展示层次结构数据,以及各种小...

    Ext框架简介.ppt

    EXT框架是一种基于JavaScript的开源Ajax框架,主要用于构建具有丰富用户界面的Web应用程序。EXT的核心特性是它提供了一系列的UI组件,使开发者能够轻松地创建出功能强大且视觉效果优秀的Web应用。EXT框架与后台技术...

    Ext JS框架 经验之作2000页

    ### Ext JS框架 经验之作2000页 #### 概述 本文档旨在提供一个全面且深入的指南,帮助读者理解并掌握Ext JS框架的各个方面。Ext JS是一款非常强大的JavaScript库,用于构建交互式的Web应用程序。它以其丰富的组件库...

    Ext下解决无弹出窗口的设计办法.docx

    在Ext JS框架中,开发人员经常遇到需要在页面中实现各种交互设计,其中包括弹出窗口的使用。然而,有些情况下,弹出窗口可能并不符合用户的使用习惯或设计美学,因此寻找替代方案变得必要。本文将探讨如何在Ext环境...

    新版EXT教程

    3. **多页面应用开发**:讲解如何利用选项卡面板或其他控件,实现在单个页面中展示多个视图的功能。 4. **性能优化**:分享一些提高EXT应用性能的最佳实践,比如按需加载资源、减少DOM操作等。 #### 六、社区资源与...

    EXT最新使用手册(中文)

    在页面中引入EXT的JavaScript文件后,开发者可以开始创建EXT组件。EXT的核心元素是Element,它是所有DOM元素的抽象表示,提供了丰富的操作DOM的方法。 3. Element:Ext的核心 Element类是EXT处理DOM的基础,提供...

    Ext-Gantt和相关js如ext-all.js ext-base

    在一些情况下,如果项目对加载速度有较高要求,可以先加载`ext-base.js`,然后再按需加载其他组件,以实现按需加载(延迟加载)来减少页面的初始加载时间。 甘特图是一种图形表示项目计划的方法,通常用水平条形图...

    Ext MVC 项目示例

    通过定义路由规则,可以实现页面间的导航和状态恢复。 7. **应用程序(Application)**: 整个EXT MVC应用是通过`Ext.application`启动的,它包含了所有控制器、视图、模型、样式和配置,是整个应用的入口点。 在...

    ext 读取xml 可编辑grid

    在EXT JS框架中,"ext 读取xml 可编辑grid"是一个常见的需求,涉及到的主要知识点包括EXT的数据对象、EditorGridPanel的使用以及EXT对XML数据格式的支持。下面将详细阐述这些内容。 EXT JS是一个强大的JavaScript库...

    ext js javascript ext设计软件

    EXT JS是一种基于JavaScript的开源富客户端框架,专为构建企业级Web应用程序而设计。它提供了一套完整的组件化UI控件、数据绑定机制以及强大的事件处理系统,使得开发者能够创建功能丰富的、交互性强的Web应用。EXT ...

    Ext4 动态加载js例子

    Ext4 是一个基于 JavaScript 的富客户端应用框架,主要用于构建复杂的 Web 应用程序。它提供了丰富的组件库,包括表格、面板、菜单等,使得开发者能够创建功能强大的交互式用户界面。`Ext.Loader` 是 Ext4 中的一个...

    基于Ext的考试系统

    本项目基于Ext框架,一个强大的JavaScript UI库,为构建用户界面提供了一系列丰富的组件和工具。ExtJS以其灵活性、可定制性和高性能,成为构建Web应用程序的理想选择。 一、Ext框架简介 ExtJS是一个开源的...

    jcifs-ext-0.9.4.jar

    jcifs-ext-0.9.4.jar便是这样一个关键的拓展包,它为Java应用程序提供了与Windows网络身份验证交互的能力,特别是在实施单点登录(Single Sign-On, SSO)系统如CAS(Central Authentication Service)时。...

    Ext2.0本地模式动态修改combobox选择项

    标题中的“Ext2.0本地模式动态修改combobox选择项”指的是使用Ext JS 2.0框架中的Combobox组件在本地数据模式下实现动态更新选择项的功能。Ext JS是一个流行的JavaScript库,主要用于构建富客户端Web应用程序。...

Global site tag (gtag.js) - Google Analytics