zoukankan      html  css  js  c++  java
  • ExtJS 4.2 业务开发(一)主页搭建

    本篇开始搭建一个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组件、设定应用程序的名称等等。

    APIhttp://docs.sencha.com/extjs/4.2.1/#!/api/Ext.app.Application

    Ext.application({
        name: 'AKApp',
        launch: function () {
            // 设定Viewport
            Ext.create('Ext.container.Viewport', {
                name: 'MainFrame',
                layout: 'border',
                items: [
                    Ext.create('Ext.panel.Panel', { // header
                         '100%',
                        height: 50,
                        bodyBorder: false,
                        border: false,
                        region: 'north',
                        style: {
                            background: '#739b2e'
                        },
                        html: '<div id="header_content">ExtJSDemo</div>'
                    }),
                    Ext.create('Ext.tree.Panel', { // menu
                        title: '目录',
                        id: 'app_tree',
                        rootVisible: false,
                        lines: false,
                        split: true,
                         '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. 在线演示

    在线演示http://www.akmsg.com/ExtJS/index.html

  • 相关阅读:
    作为一名程序员应该具备哪些素质
    从100万个整数里找出100个最大的数
    数据库 SQL语句优化
    服务器上文件打包下载
    ThreadPoolExcutor
    几种序列化与get、set方法的关系
    idea没有错误出现红色波浪线怎么去掉?
    两个对象的属性赋值
    RandomStringUtils的使用
    IDEA中类似eclipse的workSpace的实现
  • 原文地址:https://www.cnblogs.com/polk6/p/5800342.html
Copyright © 2011-2022 走看看