ext 下拉树

2024-09-05 12:32
文章标签 ext 下拉树

本文主要是介绍ext 下拉树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

效果如下:

                             

一、areaTree.js

/*** 下拉树ComboBoxTree* * @extend Ext.form.ComboBox* @xtype 'combotree'*/ComboBoxTree = Ext.extend(Ext.form.ComboBox, {/*** 作为隐藏域的name属性*/passName : 'id',/*** 是否允许非叶子结点的单击事件* * @default false*/allowUnLeafClick : true,/*** 树显示的高度,默认为180*/treeHeight : 180,store : new Ext.data.SimpleStore({fields : [],data : [[]]}),editable : false, // 禁止手写及联想功能mode : 'local',triggerAction : 'all',selectedClass : '',onSelect : Ext.emptyFn,emptyText : '请选择...',/*** 清空值*/clearValue : function() {if (this.passField) this.passField.value = '';this.setRawValue('');},/*** 设置传值* * @param passvalue*/setPassValue : function(passvalue) {if (this.passField)this.passField.value = passvalue;},/*** 下拉树被点击事件添加一处理方法* * @param node*/onTreeSelected : function(node) {},getValue : function() {return this.passField.value;},/*** 树的单击事件处理* * @param node,event*/treeClk : function(node, e) {if (!node.isLeaf() && !this.allowUnLeafClick) {e.stopEvent();// 非叶子节点则不触发return;}this.isLeaf.value = node.isLeaf();this.setValue(node.text);// 设置option值this.collapse();// 隐藏option列表if (this.passField)this.passField.value = node.id;// 以树的节点ID传递// 选中树节点后的触发事件this.fireEvent('treeselected', node);},/*** 初始化 Init*/initComponent : function() {ComboBoxTree.superclass.initComponent.call(this);this.tree.autoScroll = true;this.tree.height = this.treeHeight;this.tree.containerScroll = false;this.tplId = Ext.id();// overflow:auto"this.tpl = '<div id="' + this.tplId + '" style="height:' + this.treeHeight + 'px";overflow:hidden;"></div>';/*** 添加treeselected事件, 选中树节点会激发这个事 件, 参数为树的节点*/this.addEvents('treeselected');// this.on('treeselected',this.onTreeSelected,this);},/*** 事件监听器 Listener*/listeners : {'expand' : {fn : function() {if (!this.tree.rendered && this.tplId)this.tree.render(this.tplId);this.tree.show();},single : true},'render' : {fn : function() {this.tree.on('click', this.treeClk, this);/*** 创建隐藏输入域<input /> 并将其dom传给passField*/if (this.passName) {this.passField = this.getEl().insertSibling({tag : 'input',type : 'hidden',name : this.passName,id : this.passName}, 'before', true);}this.passField.value = this.passValue !== undefined ? this.passValue : (this.value !== undefined ? this.value : '');this.el.dom.removeAttribute('name');this.isLeaf = this.getEl().insertSibling({tag : 'input',type : 'hidden',name : 'isleaf',id : 'isleaf'}, 'before', true);// this.isLeaf.value = this.isleaf;}},'beforedestroy' : {fn : function(cmp) {this.purgeListeners();this.tree.purgeListeners();}}},//该方法是重写ext内部的方法,目的是防止点击加号后隐藏树;//会隐藏是因为comboBox控件中的某一项被点击后本身会隐藏起来。onViewClick : function(doFocus) { var index = this.view.getSelectedIndexes()[0], s = this.store, r = s.getAt(index);if (r) { this.onSelect(r, index); } else if (s.getCount() === 0) { this.collapse(); } if (doFocus !== false) { this.el.focus(); } } 
});/*** 将ComboBoxTree注册为Ext的组件,以便使用 Ext的延迟渲染机制,xtype:'combotree'*/
Ext.reg('combotree', ComboBoxTree);

二、引用上面的,下面是需要用到这个控件加载数据

var areaTree = new Ext.tree.TreePanel({rootVisible : false,root : new Ext.tree.AsyncTreeNode({id : '0',text : '全国',expanded : true,loader : new Ext.tree.TreeLoader({dataUrl : 'getAreaTree'  //查询数据的方法指向})})
});
var areaTreeCombo = new ComboBoxTree({fieldLabel : '区域',id : 'areaQuery',autoHeight : true,emptyText : '请选择...',passName : 'treecombo',// allowUnLeafClick:false,//只允许选择叶子treeHeight : 200,tree : areaTree
});

三、getAreaTree方法,数据源

@RequestMapping(value="/getAreaTree")@ResponseBodypublic List<Map<String,Object>> getAreaTree(String node) {String sql = "select t.district_id as \"id\", t.district_name as \"text\", (case when t.district_type_id = 3 then 'true' else '' end) \"leaf\"" +" from pf_district_area t where t.parent_district_id=" + node;logger.info("SQL    " + sql);List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);return  list;}

对sql语句的解释:

先看一下数据库表:


1、树各个节点(叶子或非叶子)显示的值和实际的值分别是text和id,而且都是小写,所以sql语句中查询出的列用双引号引起来了

2、我的情况是区域分为4级(实际是3级,用字段district_type_id标识):0-全国、1-省级、2-市级、3-县级。所以县级是叶子节点,因此使用了"case when"。



这篇关于ext 下拉树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138972

相关文章

Ext重写手法

常用的几种方式:1、Ext.apply()和Ext.applyIf()2、Ext.override()3、想做某个类大的修改,可以把该类单独从源码中拿出来,直接修改,然后引用时先应用ext-all.js,再引用从源码中拿出修改的那个类4、obj.prototype.method=function(){}

Ext JS主要特点有哪些?

Ext JS是一个开源的JavaScript应用程序框架,它主要用于构建富客户端的Web应用程序。具有如下特点: 丰富的UI组件:Ext JS提供了大量的UI组件,如窗体、表单、表格、树形控件等,这些组件具有高度的可定制性和可扩展性,能够满足不同开发需求。 跨浏览器兼容性:Ext JS支持所有现代浏览器,如IE6+、Firefox、Chrome、Safari等,这使得开发者可以创建在各种浏览器上都

perf 基础 -- perf ext_mem_req

perf ext_mem_req ext_mem_req 是 perf 工具事件列表中的一项,主要用于追踪处理器对外部内存的访问请求。它在以下几种情况下会触发: 数据缓存未命中:当处理器访问的数据未命中缓存时,处理器会向外部内存发送请求,加载所需的数据。指令缓存未命中:处理器在获取指令时,如果指令未命中缓存,也会触发外部内存请求,加载所需的指令。内存控制器交互:ext_mem_req 还用于衡

VS2013运行OpenGL例子提示找不到GL/glew.h,GL/freeglut_ext.h,GL/freeglut.h,glew32.lib,freeglut.lib等

按照教程: FreeGLUT库和GLEW库的安装: 把FreeGLUT库的.h文件(有4个:freeglut.h、freeglut_ext.h、freeglut_std.h和glut.h),freeglut.lib和freeglut.dll放到正确的目录下面就可以了: 将GLEW库的.h文件(glew.h、glxew.h、wglew.h),.lib文件(glew32.lib、

unbuntu usr/include/php5/ext/pcre/php_pcre.h:29:18: fatal error: pcre.h

使用sudo pecl install mongodb安装php的mongodb扩展,报错: usr/include/php5/ext/pcre/php_pcre.h:29:18: fatal error: pcre.h 可以这样解决: apt-get install libpcre3-dev 如果提示libpcre3-dev不存在,你需要更新本地资源库 sudo apt-get upd

ExtJs 入门教程十九[其它 :Ext]

1、局部更新页面:http://blog.csdn.net/itlwc/article/details/7887339 2、方法总结:http://www.jb51.net/article/29946.htm

ExtJs 入门教程十八[AJax请求 :Ext.Ajax]

一、request请求 Ext.Ajax.request({url : 'default/realNameParams!delete.action',params:{"params.cityCode":Ext.getCmp("cityCode")},success:function(response){var json=Ext.util.JSON.decode(response.response

cocos2d-x 3.3 引用【#include cocos-ext.h】头文件出现编译错误

cocos2d-x 3.3 引用【#include "cocos-ext.h"】头文件出现编译错误 添加【#include "cocos-ext.h"】 头文件后报错   f:\projects\test_httpclient\cocos2d\extensions\gui\cccontrolextension\cccontrolutils.h(39): fatal error C108

【mke2fs】ext系列文件系统创建管理工具

【mke2fs】ext系列文件系统创建管理工具 -j:ext3 -t:指定文件系统类型 -b BLOCK_SIZE:指定块大小,默认为4096:可用取值为1024,2048,4096 -L LABEL:指定分区卷标(相当于磁盘名称) 例如: mke2fs -L MYDATE /dev/sda5  即:格式化sda5分区时指定卷标为MYDATE -m #:指定预留

mq: 找不到或无法加载主类 Files\Java\jdk1.8.0_102\jre\lib\ext

错误:mq: 找不到或无法加载主类 Files\Java\jdk1.8.0_102\jre\lib\ext 原因:JAVA_HOME的环境变量包含空格 JAVA_HOME=C:\Program Files\Java\jdk1.8.0_131 解决方法:修改runserver.cmd和runbroker.cmd文件