`

下拉树ComboBoxTree

阅读更多
在网上搜了两棵下拉树,均有一些小问题,用不了,于是自己参考它们做了一棵下拉树,
代码如下:
/**
 * 下拉树ComboBoxTree
 * @extend Ext.form.ComboBox
 * @xtype 'combotree'
 * 
 * @author chengbao_zhu
 */

/**
 * ----------------------
 * Demo ComboBoxTree
 * ----------------------
 */
 /*-------------------------------------------------*
	treecombo = {
		fieldLabel : '片    源    类    别',
		width : 127,
		xtype : 'combotree',
		passName : 'videoCategory',
		allowUnLeafClick : false,
		treeHeight:200,
		tree : new Ext.tree.TreePanel({
			rootVisible : false,
			root : new Ext.tree.AsyncTreeNode({
				id : 'CategoryRoot',
				text : "影片分类",
				expanded : true,
				loader : new Ext.tree.TreeLoader({
					dataUrl : UrlPpts.ajax.vdocategory + '?method=tree'
				})
			})
		}),
		allowBlank : false
	}
*-----------------------------------------------------*/

ComboBoxTree = Ext.extend(Ext.form.ComboBox, {

	/**
	 * ------------------------------------- 
	 * 作为隐藏域的name属性
	 * -------------------------------------
	 */
	passName : 'id',

	/**
	 * ------------------------------------- 
	 * 是否允许非叶子结点的单击事件
	 * 
	 * @default false 
	 * -------------------------------------
	 */
	allowUnLeafClick : true,

	/**
	 * --------------------- 
	 * 树渲染的模板tpl 
	 * ---------------------
	 */
	// tpl: '<div id="treeTpl"></div>', //html代码
	/**
	 * -----------------------
	 * 树显示的高度,默认为180
	 * -----------------------
	 */
	treeHeight : 180,

	store : new Ext.data.SimpleStore({
		fields : [],
		data : [[]]
	}),
	
	//Default
	editable : false, // 禁止手写及联想功能
	mode : 'local',
	triggerAction : 'all',
	maxHeight : 500,
	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) {

	},

	/**
	 * ---------------------------------- 
	 * 树的单击事件处理
	 * @param node,event
	 * ----------------------------------
	 */
	treeClk : function(node, e) {
		if (!node.isLeaf() && !this.allowUnLeafClick) {
			e.stopEvent();// 非叶子节点则不触发
			return;
		}
		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="' + this.treeHeight
				+ '";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.passId || Ext.id()
					}, 'before', true)
				}

				this.passField.value = this.passValue !== undefined
						? this.passValue
						: (this.value !== undefined ? this.value : '');

				this.el.dom.removeAttribute('name');
			}
		},
		'beforedestroy' : {
			fn : function(cmp) {
				this.purgeListeners();
				this.tree.purgeListeners();
			}
		}
	}

});

/**
 * --------------------------------- 
 * 将ComboBoxTree注册为Ext的组件,以便使用
 * Ext的延迟渲染机制,xtype:'combotree' 
 * ---------------------------------
 */
Ext.reg('combotree', ComboBoxTree);


分享到:
评论
1 楼 fengbingji 2009-07-08  
我在formpanel上面使用combotree时,如何绑定combotree的值呢(即form load之后如何给combotree赋值)?

相关推荐

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

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

    Extjs ComboBoxTree 下拉树组件

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

    [Ext 3.x + Ext 2.x] 下拉树 Ext.ux.ComboBoxTree

    【Ext 3.x + Ext 2.x 下拉树 Ext.ux.ComboBoxTree】是基于ExtJS框架的一个组件,它结合了下拉框(ComboBox)和树形控件(TreePanel)的功能,提供了一种用户友好的选择界面。在网页应用中,这种控件常用于展示层级...

    wpf_combobox_tree下拉树形控件

    对于树形ComboBox,我们需要创建一个模板,包含一个TextBox(显示当前选择)和一个Popup(作为下拉树形列表)。这个模板需要使用HierarchicalDataTemplate来展示树形数据。 2. **数据绑定**:WPF提供了强大的数据...

    Extjs4.X下comboboxTree下拉树型菜单,完美支持多选、单选,绝对好用

    综上所述,ExtJS 4.x的ComboboxTree组件是实现下拉树形菜单的强大工具,它结合了下拉框的简洁和树结构的层次感,提供了丰富的定制选项,能满足多种场景下的需求。理解并熟练掌握其用法,将极大地提升开发效率和用户...

    ExtJs下拉树

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

    WpfComboboxTreeview(下拉树).zip

    WPF的下拉选择树,直接可以使用,压缩包资源包含源码。提供简单风格,ItemsSource、SelectedItem支持双向绑定,文本显示有两种模式(通过IsSimpleDisplayValue属性设置)。可通过给SelectedItem赋值自动展开并选中树...

    extjs4 实现下拉树并支持复选

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

    Extjs自定义组件-下拉树

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

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

    在EXTJS4中,下拉菜单树(ComboBox+Tree)是一种高级UI组件,它结合了ComboBox的下拉选择框和TreePanel的树形结构,提供了一种用户友好的交互方式,用于展示层次化的数据。这种组件特别适用于需要从多个选项中进行...

    下拉树,类comboxtree

    下拉树,通常被称为Combobox Tree或ComboBoxTree,是一种结合了下拉列表和树形结构的控件。在用户界面设计中,它提供了一种高效且直观的方式来展示和选择层次结构的数据。类comboxtree是Java Swing或者类似的GUI库中...

    ext 下拉树

    在Ext JS中,下拉树(Dropdown Tree)是一种将下拉菜单和树结构结合的组件,常用于需要从层次结构数据中选择一项或多项的场景。这种组件能够节省页面空间,同时提供清晰的层级导航。 在Ext 4.0版本中,下拉树的实现...

    ComboBoxTree.js

    《ComboBoxTree.js:JavaScript中的下拉树控件详解》 ComboBoxTree.js,作为一个常见的JavaScript库,主要用于在Web应用中实现一种结合了下拉框和树形结构的控件。这种控件融合了下拉列表的选择功能与树形结构的...

    ExtJS下拉列表树控件1

    在ExtJS中实现下拉列表树控件(ComboBoxTree)通常涉及以下步骤: 1. 引入ExtJS库:首先,你需要在HTML文件中引入ExtJS的CDN链接或本地库文件。 2. 创建Store:定义一个数据存储(Store),用于存放树形结构的数据...

    ComboBoxTree combobox里面显示tree

    `ComboBoxTree`就是一个很好的例子,它将传统的`ComboBox`与`TreeView`控件的功能结合在一起,为用户提供了一种在下拉列表中以树形结构展示数据的新方式。这个组件是由非官方的开发者设计的,目的是解决在有限的空间...

    ComboxTree(C#下拉框是树形结构)

    "ComboxTree"控件通常是在C#环境下开发的,它允许在下拉列表中展示树形结构数据,这样用户就可以通过展开节点来查看和选择深层次的选项。这种控件在数据层级关系复杂时特别有用,比如组织架构、地区分类或产品类别等...

    ComboboxTree

    用Div和TreeView模拟的下拉框树. 并解决了Select总在最顶端的问题,即下拉框中的树不被Select控件遮盖 用c# + asp.net 2.0实现 ComboBoxTreeCtrl.ascx为自定义下拉树控件 Default.aspx为例子页面

    ComboBoxTree

    ComboBoxTree是一种常见的UI组件,常用于网页开发中,它结合了下拉框(ComboBox)和树形结构(Tree)的特点,提供了一种高效且灵活的数据选择方式。在Web应用程序中,用户可以像普通下拉框那样快速浏览和选择,同时...

    ext comboboxtree

    ComboboxTree是这个框架中的一种特殊组件,结合了ComboBox(下拉列表)和TreePanel(树形结构)的功能,用户可以在一个下拉列表中选择或搜索树形结构的数据。 博客链接提到的是iteye上的一个博客,虽然具体内容无法...

Global site tag (gtag.js) - Google Analytics