当前位置: 首页
前端开发
Extjs树形控件加载右侧TabPanel实现方法

Extjs树形控件加载右侧TabPanel实现方法

热心网友 时间:2026-06-10
转载

基于ExtJS4 1框架,通过将左侧功能树节点id映射为右侧TabPanel视图别名,实现联动。点击树节点时,系统根据id动态添加或激活对应视图,完成页面切换。该设计简化了视图管理,提升了交互效率。

最近在开发一套物流管理系统的前端界面,技术选型要求必须基于 ExtJS 4.1。说实话,这个版本虽然成熟稳定,但网上能找到的实战教程相对较少,尤其是一些界面联动的细节,往往需要反复查阅 API 并不断试错才能跑通。下面就把左侧功能树与右侧 TabPanel 联动的完整思路和核心代码拆解出来,希望能对遇到类似需求的朋友有所帮助。

1. 左侧的功能树

首先定义一个树形结构,作为左侧导航菜单。这里采用 Ext.tree.Panel,关键配置如下:

Ext.define("AM.view.SystemTree", { 
    extend : 'Ext.tree.Panel', 
    alias : 'widget.systemTree', 
    rootVisible : false, // 不展示 ROOT
    displayField : 'text', 
    // title:'物流运输系统',
    viewConfig : { 
        plugins : {
            ptype : 'treeviewdragdrop'
        },
        listeners : {
            drop : function(node, data, overModel, dropPosition, options) {
                alert("把: " + data.records[0].get('text') + " 移动到: " 
                    + overModel.get('text'));
            }
        }
    },
    dockedItems : [ {
        xtype : 'toolbar',
        items : [ {
            xtype : 'button',
            id : 'allopen',
            icon : 'resources/img/lock_open.png',
            text : '展开全部'
        }, {
            xtype : 'button',
            id : 'allclose',
            icon : 'resources/img/lock.png',
            text : '收起全部'
        } ]
    } ],
    root : {
        text : 'root',
        leaf : false,
        id : '0',
        children : [ {
            text : '运输管理',
            checked : false, 
            leaf : false, 
            icon : 'resources/img/folder_user.png',
            id : '01',
            children : [ {
                text : '车辆信息管理',
                checked : false,
                icon : 'resources/img/report_edit.png',
                leaf : true,
                id : 'vehiclelist'  // 关键:这里的 id 必须指定为待打开视图的别名
            }]
        }]
    }
});

要点

  • 树组件一定要设置 alias,便于后续引用。
  • 子节点的 id 必须等于右侧对应视图的 alias 值——这是联动机制的核心。后面会看到,点击树节点时正是通过这个 id 来精准定位具体视图。

2. 需要打开的对应视图

以“车辆信息管理”为例,定义一个 GridPanel,注意别名和 id 必须保持一致:

Ext.define("AM.view.transportation.VehicleList",{
    extend:'Ext.grid.Panel',
    alias:'widget.vehiclelist',  // 别名必须与树节点 id 一致
    id:'vehiclelist',
    store:'VehicleStore',
    // ......中间代码省略
    columns : [
        {text:'车辆编号',dataIndex:'vehicleNo',
            field:{
                xtype:'textfield',
                allowBlank:false
            }
        },
        {text:'车辆描述',xtype:'templatecolumn',
            tpl:'车辆的编号为{vehicleNo} 所在地区为{vehicleArea}'
        }
    ],
    initComponent:function(){
        this.callParent(arguments);
    }
});

3. 建立右侧的 TabPanel

主界面右侧放置一个 TabPanel,用于承载各个功能页面。初始化时先放一个默认的首页:

Ext.define('AM.view.TabPanel',{ 
    extend: 'Ext.tab.Panel', 
    alias:'widget.tabpanel', 
    closeAction: 'destroy', 
    defaults :{
        bodyPadding: 10
    },
    items: [{
        title: '主页', 
        autoLoad:'content.jsp'     // 简单的 panel 加载页面
    }]
});

4. 设置点击 tree 的触发事件

最后是关键一步:监听树节点的点击事件,根据节点 id 在 TabPanel 中动态添加或激活对应的视图。注意通过层层定位找到右侧的 tabpanel 组件:

'systemTree':{
    itemclick:function(tree,record,item,index,e,options){
        var tabs = tree.ownerCt.ownerCt.ownerCt
            .child('#center-grid').child("#tabpanel");
        // 获取当前点击的节点
        var treeNode=record.raw;
        var id = treeNode.id;
        var text=treeNode.text;
        // 获取与树节点 id 相同的 tab 标签
        var tab = tabs.getComponent(id);
        if(!tab){ // 如果不存在则新建
            tabs.add({
                id:id,
                closable: true,
                title:text,
                iconCls:id,
                xtype:id   // 将 id 作为 xtype,渲染对应的视图
            }).show();
        }else{ // 如果已存在则激活
            tabs.setActiveTab(tab);
        }
    }
},

效果图如下(来自实际项目截图):

联动效果截图

总结

ExtJS 构建的界面视觉效果非常出色,但新版本的学习曲线相对陡峭,尤其网上能找到的完整实战案例不多。遇到问题时最有效的方法还是仔细阅读 API 文档,并对照官方示例逐步调试。上面这套左侧树 + 右侧 TabPanel 联动的设计模式,在后台管理系统中极为常用,代码量不大,只要把 id 和 alias 的映射关系理清楚,基本就能顺利实现。刚接触 ExtJS 不久,如有不当之处欢迎指正交流。

来源:https://www.jb51.net/article/36430.htm

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
DCloud平台选型指南 适用场景与核心差异详解

DCloud平台选型指南 适用场景与核心差异详解

DCloud是一个围绕跨平台开发与流应用构建的技术生态,旨在帮助前端开发者使用Web技术开发高性能移动应用。其核心产品包括集成开发环境HBuilderX和基于Vue js的uni-app框架,支持一套代码发布至iOS、Android、Web及多端小程序。相比ReactNative和Flutter,uni-app在多端覆盖和Vue技术栈学习成本上具有优势,适合

时间:2026-07-10 06:47
DCloud使用教程与常见问题解决方案详解

DCloud使用教程与常见问题解决方案详解

DCloud提供跨平台应用开发方案,核心为HBuilderX与uni-app框架。开发者使用Vue js语法编写代码,可编译发布至iOS、Android、Web及小程序等多端。流程涵盖项目创建、开发调试与真机预览。常见问题如设备识别、编译失败等可通过检查设置、查看日志与条件编译解决。应用完成后支持云打包生成安装包。

时间:2026-07-10 06:47
DCloud新手入门教程 从零开始快速掌握开发技巧

DCloud新手入门教程 从零开始快速掌握开发技巧

DCloud是一个基于Web技术的跨平台应用开发平台,允许开发者使用HTML5等语言编写代码,并编译为iOS、Android及小程序应用,实现“一次编写,多端发布”。开发需使用HBuilderX,基于Vue js进行页面开发,平台提供丰富组件与API,并支持插件市场扩展功能。

时间:2026-07-10 06:47
DCloud新手入门指南从零开始了解这个开发平台

DCloud新手入门指南从零开始了解这个开发平台

DCloud是一个移动应用开发平台,旨在帮助前端开发者使用Web技术高效开发性能接近原生的跨平台应用。其核心产品包括HBuilderX开发环境和基于Vue js的uni-app框架,可实现一次开发、多端发布。平台通过完整工具链和插件生态降低开发门槛,适合需要快速迭代、覆盖多端的应用场景。

时间:2026-07-10 06:47
Zepto实战项目优化技巧与应用场景详解

Zepto实战项目优化技巧与应用场景详解

Zepto js作为轻量级JavaScript库,专为移动端优化,体积仅约10KB。它支持模块化定制,可按需构建以减小体积。使用时需减少DOM操作、善用事件委托,并可混合原生API提升性能。Zepto能融入现代工程流,但需注意其与jQuery的API差异及兼容性限制,适合在移动端性能优先的场景中替代jQuery。

时间:2026-07-10 06:47
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜