博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ExtJS 4.2 业务开发(一)主页搭建
阅读量:5144 次
发布时间:2019-06-13

本文共 5295 字,大约阅读时间需要 17 分钟。

本篇开始搭建一个ExtJS 4.2单页面应用, 这里先介绍主页的搭建,内容包括:主页结构说明、扩展功能等方面。

目录

1.

2.

3.

 

1. 主页结构说明

1.1 主页布局

传统的ExtJS 4.2应用,基本布局如下:

 

1.2 主页布局分析

根据上面的主页布局图,可转换具体试图结构:

header:存放系统的名称、logo、用户信息等内容。

menu:菜单区域,以Tree形态展现业务入口。

tab:业务区域,具体的业务都以tab页的形式嵌入到此区域。

 

1.3 主页布局代码

从ExtJS 4开始,应用程序的入口点开始使用为 Ext.application。

此方法取代了之前的Ext.onReady(),并增加了一些新的功能:创建一个viewport组件、设定应用程序的名称等等。

API

Ext.application({    name: 'AKApp',    launch: function () {        // 设定Viewport        Ext.create('Ext.container.Viewport', {            name: 'MainFrame',            layout: 'border',            items: [                Ext.create('Ext.panel.Panel', { // header                    width: '100%',                    height: 50,                    bodyBorder: false,                    border: false,                    region: 'north',                    style: {                        background: '#739b2e'                    },                    html: '
ExtJSDemo
' }), Ext.create('Ext.tree.Panel', { // menu title: '目录', id: 'app_tree', rootVisible: false, lines: false, split: true, width: '20%', region: 'west', root: { expanded: true, children: [ { text: '业务', expanded: true, children: [] }, { text: 'Demo', expanded: true, children: [ { text: '创建组件', id: 'Demo.CreateCompareP', leaf: true }, { text: '查找组件', id: 'Demo.QueryCompareP', leaf: true }, ] } ] }, listeners: { select: function (thisView, thisControl) { if (thisControl.data.leaf) {                  // TODO:点击菜单,创建相关的Tab页 } } } }), Ext.create('Ext.tab.Panel', { // tab id: 'app_tabContainer', region: 'center', autoScroll: true, defaults: { autoScroll: true, bodyPadding: 4, closable: true //tab页的关闭按钮 } }), ] }); }});

  

2. 扩展功能

这里说明主页常见的2种功能:

第1种:点击菜单,动态加载业务文件。

第2种:业务tab页的切换,修改页面URL的值。

2.1 点击菜单,动态加载业务文件

说明:各业务的入口都是在ExtJS tree组件的叶子节点上,系统初次加载时只展示了主页功能,并没有加载任何的业务代码。现在要求点击菜单的节点,展示业务页面。

步骤:点击菜单 → 加载业务文件 → 在tab容器内展现此业务

代码:在tree容器添加select事件

Ext.create('Ext.tree.Panel', {    title: '目录',    root: {       expanded: true,       children: [           {               text: '业务',               expanded: true,               children: [                   { text: '船舶管理', id: 'ShipMgr.ShipMgrP', leaf: true },               ]           }       ]    ,    listeners: {        select: function (thisView, thisControl) {            if (thisControl.data.leaf) {                var tabId = thisControl.data.id;                // 1.设置tab页的默认参数                var tabConfig = {                    closable: true,                    title: thisControl.data.text,                    id: tabId,                    bodyBorder: false,                    border: false,                    icon: 'tab.png'                };                // 2.判断是否已存在此Tab,若存在就显示                var newTab = Ext.getCmp('app_tabContainer').getComponent(tabId);                if (!newTab) {                    // 2.1 加载业务文件                    var tabPath = 'app.' + tabId; // 界面路径 eg:app.ShipMgr.ShipMgrP                    Ext.syncRequire(tabPath, function () {                        newTab = Ext.create(tabId, tabConfig);                        Ext.getCmp('app_tabContainer').add(newTab);                        Ext.getCmp('app_tabContainer').setActiveTab(newTab);                    });                } else {                    // 2.2 已存在此业务的tab页就直接设置active                    Ext.getCmp('app_tabContainer').setActiveTab(newTab);                }            }        }    }  })

 

2.2 业务tab页的切换,修改页面URL的值

说明:此功能主要用于根据URL直接访问具体的业务额,当然访问之前最好还要做下权限判断。

步骤:新建或切换tab页 → 选中菜单的节点 → 修改页面URL

代码:在tab容器添加tabchange事件

Ext.create('Ext.tab.Panel', {    id: 'app_tabContainer',    region: 'center',    autoScroll: true,    listeners: {        tabchange: function (thisControl, newCard, oldCard) {            var tabId = newCard.id;            // 1.选中菜单的节点            var node = Ext.getCmp('app_tree').store.getNodeById(tabId);            if (node) {                Ext.getCmp('app_tree').getSelectionModel().select(node);            } else {                Ext.getCmp('app_tree').getSelectionModel().select(0);            }                       // 2.修改url            if (oldCard) {                history.pushState('', '', location.href.split('#')[0] + '#' + newCard.id);            }        }    }}),

 

 

3. 在线演示

在线演示

 

转载于:https://www.cnblogs.com/polk6/p/5800342.html

你可能感兴趣的文章
分布式时间同步ntp安装
查看>>
std::list
查看>>
Java中的增强 for 循环 foreach
查看>>
各种类型工具类
查看>>
OKR-Periods of Words
查看>>
MD5Encoder
查看>>
UIView中的坐标转换
查看>>
iOS沙盒目录
查看>>
【C#数据结构系列】查找
查看>>
0405第四章读后感
查看>>
ImageView读取本地路径图片
查看>>
简单 php 代码跟踪调试实现
查看>>
json总结
查看>>
个人发展生存之道
查看>>
TensorFlow分布式计算机制解读:以数据并行为重
查看>>
python 跨域处理方式
查看>>
oc-NSArray
查看>>
【2019-08-11】别人约我宵夜,我却约人早茶
查看>>
Vim 快捷键
查看>>
3年A班,从现在起大家都是人质-观后感
查看>>