Extjs中ComboBoxTree自定义下拉框树效果完整实现代码示例
近期在项目中遇到了一个需求:需要实现一个带树形结构的 ComboBox 下拉框,即 Extjs 树形下拉框。先来看一下最终效果——这种功能在 Extjs 原生组件中并不存在,必须自行开发。通过网络调研,参考了多位开发者的实现思路,结合自己的理解进行整合,最终封装成了 Ext ux TreeCombo
近期在项目中遇到了一个需求:需要实现一个带树形结构的 ComboBox 下拉框,即 Extjs 树形下拉框。先来看一下最终效果——这种功能在 Extjs 原生组件中并不存在,必须自行开发。通过网络调研,参考了多位开发者的实现思路,结合自己的理解进行整合,最终封装成了 Ext.ux.TreeCombo 自定义组件。以下是完整代码,可直接复制使用。
复制代码 代码如下:
Ext.ux.TreeCombo = Ext.extend(Ext.form.ComboBox, { constructor: function (cfg) { cfg = cfg || {}; Ext.ux.TreeCombo.superclass.constructor.call(this, Ext.apply({ maxHeight: 300, editable: false, mode: 'local', triggerAction: 'all', rootVisible: false, selectMode: 'all' }, cfg)); }, store: new Ext.data.SimpleStore({ fields: [], data: [[]] }), // 重写onViewClick,使展开树结点是不关闭下拉框 onViewClick: function (doFocus) { var index = this.view.getSelectedIndexes()[0], s = this.store, r = s.getAt(index); if (r) { this.onSelect(r, index); } if (doFocus !== false) { this.el.focus(); } }, tree: null, // 隐藏值 hiddenValue: null, getHiddenValue: function () { return this.hiddenValue; }, getValue: function () { //增加适用性,与原来combo组件一样 return this.hiddenValue; }, setHiddenValue: function (code, dispText) { this.setValue(code); Ext.form.ComboBox.superclass.setValue.call(this, dispText); this.hiddenValue = code; }, initComponent: function () { var _this = this; var tplRandomId = 'deptcombo_' + Math.floor(Math.random() * 1000) + this.tplId this.tpl = "
" this.tree = new Ext.tree.TreePanel({ border: false, enableDD: false, enableDrag: false, rootVisible: _this.rootVisible || false, autoScroll: true, trackMouseOver: true, height: _this.maxHeight, lines: true, singleExpand: true, root: new Ext.tree.AsyncTreeNode({ id: _this.rootId, text: _this.rootText, iconCls: 'ico-root', expanded: true, leaf: false, border: false, draggable: false, singleClickExpand: false, hide: true }), loader: new Ext.tree.TreeLoader({ nodeParameter: 'ID', requestMethod: 'GET', dataUrl: _this.url }) }); this.tree.on('click', function (node) { if ((_this.selectMode == 'leaf' && node.leaf == true) || _this.selectMode == 'all') { if (_this.fireEvent('beforeselect', _this, node)) { _this.fireEvent('select', _this, node); } } }); this.on('select', function (obj, node) { var dispText = node.text; var code = node.id; obj.setHiddenValue(code, dispText); obj.collapse(); }); this.on('expand', function () { this.tree.render(tplRandomId); }); Ext.ux.TreeCombo.superclass.initComponent.call(this); } }) Ext.reg("treecombo", Ext.ux.TreeCombo);组件开发完成后,需要在主页面中引入必要的 Extjs 类库文件。请注意引入顺序与文件路径的准确性:
复制代码 代码如下:
其中 login.js 文件包含了业务逻辑代码,以下为核心代码片段(完整实现请根据实际项目需求进行调整):
复制代码 代码如下:
/* File Created: 五月 27, 2013 */ Ext.onReady(function () { var _window = new Ext.Window({ title: "查询条件", renderTo: Ext.getBody(), frame: true, plain: true, buttonAlign: "center", closeAction: "hide", maximizable: true, closable: true, bodyStyle: "padding:20px", width: 350, height: 300, layout: "form", lableWidth: 110, defaults: { xtype: "textfield", width: 180 }, // ... 此处省略窗口内的具体组件配置,实际使用时根据需求补充 }); });
至此,文章开头展示的树形下拉框效果便成功实现。该组件的核心实现思路如下:基于 Ext.form.ComboBox 进行扩展,在组件展开时动态渲染一个 TreePanel 到下拉框的模板区域中;通过重写 onViewClick 方法,防止展开树节点时意外关闭下拉框;同时监听树节点的点击事件,用于设置隐藏值和显示文本。

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
DCloud平台选型指南 适用场景与核心差异详解
DCloud是一个围绕跨平台开发与流应用构建的技术生态,旨在帮助前端开发者使用Web技术开发高性能移动应用。其核心产品包括集成开发环境HBuilderX和基于Vue js的uni-app框架,支持一套代码发布至iOS、Android、Web及多端小程序。相比ReactNative和Flutter,uni-app在多端覆盖和Vue技术栈学习成本上具有优势,适合
DCloud使用教程与常见问题解决方案详解
DCloud提供跨平台应用开发方案,核心为HBuilderX与uni-app框架。开发者使用Vue js语法编写代码,可编译发布至iOS、Android、Web及小程序等多端。流程涵盖项目创建、开发调试与真机预览。常见问题如设备识别、编译失败等可通过检查设置、查看日志与条件编译解决。应用完成后支持云打包生成安装包。
DCloud新手入门教程 从零开始快速掌握开发技巧
DCloud是一个基于Web技术的跨平台应用开发平台,允许开发者使用HTML5等语言编写代码,并编译为iOS、Android及小程序应用,实现“一次编写,多端发布”。开发需使用HBuilderX,基于Vue js进行页面开发,平台提供丰富组件与API,并支持插件市场扩展功能。
DCloud新手入门指南从零开始了解这个开发平台
DCloud是一个移动应用开发平台,旨在帮助前端开发者使用Web技术高效开发性能接近原生的跨平台应用。其核心产品包括HBuilderX开发环境和基于Vue js的uni-app框架,可实现一次开发、多端发布。平台通过完整工具链和插件生态降低开发门槛,适合需要快速迭代、覆盖多端的应用场景。
Zepto实战项目优化技巧与应用场景详解
Zepto js作为轻量级JavaScript库,专为移动端优化,体积仅约10KB。它支持模块化定制,可按需构建以减小体积。使用时需减少DOM操作、善用事件委托,并可混合原生API提升性能。Zepto能融入现代工程流,但需注意其与jQuery的API差异及兼容性限制,适合在移动端性能优先的场景中替代jQuery。
- 热门数据榜
相关攻略
2026-07-10 06:47
2026-07-10 06:47
2026-07-10 06:47
2026-07-10 06:47
2026-07-10 06:47
2026-07-10 06:46
2026-07-10 06:46
2026-07-10 06:46
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

