`
raywithu
  • 浏览: 24676 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

ExtJs下拉树的实现

阅读更多


 直接上代码:

 

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;
	},
	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 = "<div style='height:" + _this.maxHeight + "px' id='" + tplRandomId + "'></div>"
		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,
				leaf : false,
				border : false,
				draggable : false,
				singleClickExpand : false,
				hide : true
			}),
			loader : new Ext.tree.TreeLoader({
				dataUrl : _this.url
			})
		});
		this.tree.on('click', function(node) {
			if ((_this.selectMode == 'leaf' && node.leaf == true) || _this.selectMode == 'all') {
				// if (node.parentNode && node.parentNode.attributes.id != '000000') {
				var dispText = node.text;
				var code = node.id;
				while (node.parentNode && node.parentNode.attributes.id != '000000') {
					if (node.parentNode.text != dispText) {
						dispText = node.parentNode.text + dispText;
					}
					node = node.parentNode;
				}
				_this.setHiddenValue(code, dispText);
				_this.collapse();
			}
		});
		this.on('expand', function() {
			this.tree.render(tplRandomId);
		});
		Ext.ux.TreeCombo.superclass.initComponent.call(this);
	}
})
Ext.reg("treecombo", Ext.ux.TreeCombo);

 

 使用示例:

 

	{
		xtype : 'treecombo',
		name : 'areaName',
		tplId : 'tree_tpl',
		rootVisible : true,
		rootText : '全国',
		url : 'loadArea',
		fieldLabel : '地区',
		maxHeight : 300,
		value : '全国',
		hiddenValue : '000000',
		anchor : '95%'
	}

 

不过通过formPanel.getForm().getValues()是获取不到treecombo的值的,需要自己手工调用

 

var treeValue = treeCombo.getHiddenValue();
treeCombo是上面控件的实例
然后通过Ext.apply(formJSON,{areaName:treeValue})对用formJSON中的显示值进行替换

http://raywithu.iteye.com/admin/blogs/1139509

  • 大小: 12 KB
1
1
分享到:
评论
2 楼 raywithu 2013-09-23  
鸭子听雷公 写道
想看看到底是怎么实现的

上面的代码是齐全的。
1 楼 鸭子听雷公 2013-09-06  
想看看到底是怎么实现的

相关推荐

    extjs下拉树

    ExtJS下拉树是一种在Web应用中常用的交互组件,它结合了下拉框和树形结构的优点,使得用户可以...总的来说,ExtJS下拉树是通过组合ExtJS的基础组件和自定义代码来实现的,它提供了一种高效的方式来展示和操作层级数据。

    Extjs下拉多选树

    1. **下拉树组件**:在ExtJS中,树形组件(TreePanel)用于展示层次结构的数据。它支持动态加载、拖放操作、节点展开和折叠等功能。而下拉树是将树形结构嵌入到下拉框中,通常用于选择一组相关的项目,比如文件夹...

    ExtJs下拉树

    在ExtJS中,下拉树(ComboBoxTree)是一种结合了下拉框和树结构的组件,它允许用户从一个展开的树形列表中选择值,而不是传统的单行文本输入或简单的下拉列表。这种组件在数据层级结构复杂且需要用户进行多级选择时...

    Extjs4 下拉树 TreeCombo

    ExtJS 4 下拉树(TreeCombo)是一种组合控件,它将传统的下拉框与树形结构结合在一起,提供了一种在有限空间内展示层级数据的高效方式。这种控件在很多场合都非常实用,例如在需要用户选择分类或者层级结构的场景中...

    Extjs4下拉树菜单ComboBoxTree支持单选和多选并且支持展开选中指定节点的通用控件

    在这个特定的情况下,我们讨论的是一个定制的下拉树菜单控件——ComboBoxTree,它在ExtJS4中实现了单选和多选功能,并且具备展开选中指定节点的能力。这个控件在实际项目中已经被广泛使用并证明了其稳定性和实用性,...

    Extjs自定义组件-下拉树

    ### Extjs自定义组件——下拉树:深入解析与实现 在现代Web开发中,Extjs作为一款功能强大且灵活的框架,深受开发者喜爱。它提供了丰富的UI组件库,能够帮助开发者快速构建复杂的用户界面。其中,自定义组件是Extjs...

    ExtJS下拉列表树控件

    总结起来,ExtJS下拉列表树控件的应用涉及到多个知识点,包括但不限于数据源的构建、ComboBox Tree的配置、GridPanel的编辑功能、事件监听及处理,以及在具体场景中的问题解决。通过理解这些概念并实践,可以创建出...

    ExtJS3 实现异步下拉树

    在ExtJS 3中,实现异步下拉树涉及到几个关键概念和技术。 首先,理解“异步”意味着数据不是一次性加载完毕,而是按需加载。在下拉树中,当用户展开树节点时,只加载该节点及其子节点的数据,这减少了初始页面加载...

    Extjs6中利用treePicker实现的下拉树中

    利用extjs6自带的treePicker插件,实现下拉树的效果

    extjs4 实现下拉树并支持复选

    在EXTJS4中,实现一个下拉树(Combobox Tree)并支持多选和复选功能,主要是通过自定义组件(Ext.define)来完成的。这个组件继承自EXTJS的Picker字段(Ext.form.field.Picker),并添加了树形结构和复选功能。以下...

    extjs树形下拉框treeField

    extjs 树形下拉列表框,可以进行数据选择,数据回显。

    Extjs实现下拉菜单效果

    在文章中提供了一个ExtJS下拉树组件的实现示例代码。这段代码详细展示了如何通过ExtJS框架的类和组件来构建一个下拉树。其中关键点如下: 1. 构建TreeComboBox类,它继承自***boBox。这是ExtJS中用于创建表单字段的...

    Extjs4 多选下拉树

    在ExtJS4中,多选下拉树(Multi Select Tree)是一种用户界面组件,它结合了下拉菜单和树形结构,允许用户从层级结构中选择多个项目。这个组件在数据管理、分类选择等场景中非常实用。 在实现多选下拉树时,我们...

    Extjs4 下拉树( v1.0版本有bug,已经上传一个可以用的)

    标题中的“Extjs4 下拉树”指的是EXTJS框架中的一个组件,用于实现下拉菜单与树形结构的结合,这种组件通常在需要选择层级结构数据时非常有用,比如地区选择、组织架构选择等。EXTJS是Sencha公司开发的一个...

    ExtJS下拉列表树控件1

    标题中的“ExtJS下拉列表树控件1”指的是在ExtJS框架中使用的一种特殊的下拉选择组件,它不仅具备了传统的下拉列表功能,还集成了树形结构,允许用户在下拉菜单中选择嵌套层次的数据。这种控件在处理具有层级关系的...

    ExtJS4下拉树组件

    ### ExtJS4 下拉树组件知识点详解 #### 一、概述 在ExtJS4中,下拉树组件(TreeComboBox)是一种特殊的组合框,它结合了下拉列表和树形结构的功能,允许用户通过选择树节点来填充组合框的值。这种组件广泛应用于...

    extjs4 下拉菜单树 combobox+tree 支持单选多选

    本教程将深入讲解如何实现EXTJS4下的下拉菜单树,并支持单选和多选功能。 1. **EXTJS4的基础概念** - EXTJS是一个基于JavaScript的富客户端框架,提供了一系列强大的组件库,可以构建复杂的、数据驱动的Web应用...

    ext 下拉树demo

    这篇博客文章可能是介绍如何在EXT中实现一个下拉树的功能,并提供了一个名为`TreePicker.js`的代码示例。 EXT框架由Sencha公司开发,它主要服务于富客户端应用,提供了一整套UI组件和数据绑定机制,使得开发者可以...

    Extjs ComboBoxTree 下拉树组件

    文件"ComboBoxTree"可能是实现这一组件的源代码或者配置文件,包含了实现下拉树组件的JavaScript代码和相关的配置信息。如果需要深入了解或修改这个组件,你需要查看这个文件的内容,理解其中的数据结构、事件处理和...

Global site tag (gtag.js) - Google Analytics