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

extjs TreeComboBox

阅读更多
Ext.ns('Ext.my.form');
// TreeComboBox
(function() {
	var createTreePanel = function(treeWidth, treeHeight, rootVisible, root) {
		var treePanel = new Ext.tree.TreePanel( {
			//id : 'treePanel-' + (++Ext.Component.AUTO_ID),
			root : root,
			rootVisible : rootVisible,
			floating : true,
			autoScroll : true,
			renderTo : Ext.getBody(),
			width : treeWidth || 230,
			height : treeHeight || 250,
			tbar:{},
			bbar:{}
		});

		return treePanel;
	}

	var createStore = function(treePanelId, storeBaseParams, storeMethod,
			dataUrl, storeRoot, storeTotalProperty) {
		var store = new Ext.data.JsonStore( {
			proxy : new Ext.data.HttpProxy( {
				method : storeMethod || 'GET',
				url : dataUrl
			}),
			baseParams : storeBaseParams || {
				query : '',
				start : 0
			},
			root : storeRoot || 'data',
			totalProperty : storeTotalProperty || "total",
			fields : [0],
			autoLoad : false,
			load : function(options) {
				options.callback = function() {
					Ext.getCmp(treePanelId).root.removeAll(true);
					Ext.getCmp(treePanelId).root
							.appendChild(this.reader.jsonData.data);
				};
				return Ext.data.JsonStore.superclass.load.call(this, options);
			}
		})
		return store;
	}

	Ext.my.form.TreeComboBox = Ext.extend(Ext.form.TwinTriggerField, {

		initComponent : function() {
			Ext.my.form.TreeComboBox.superclass.initComponent.call(this);
			this.on('specialkey', function(f, e) {
				if (e.getKey() == e.ENTER) {
					this.onTrigger2Click();
				}
			}, this);
			this.treePanel = createTreePanel(this.treeWidth, this.treeHeight,
					this.rootVisible, this.root);
			this.treePanel.on('hide', this.onTreeHide, this);
			this.treePanel.on('show', this.onTreeShow, this);
			this.treePanel.on('click', this.onTreeNodeClick, this);
			//this.treePanel
			//		.on('collapsenode', this.onExpandOrCollapseNode, this);
			this.store = createStore(this.treePanel.id, this.storeBaseParams,
					this.storeMethod, this.dataUrl, this.storeRoot,
					this.storeTotalProperty);			
			this.treePanel.getTopToolbar().addItem(new Ext.ux.form.SearchField( {
						width : this.treeWidth ? this.treeWidth : 220,
						store : this.store
					}));
			this.treePanel.getBottomToolbar().addItem(new Ext.PagingToolbar({store:this.store}));
			this.resizer = new Ext.Resizable(this.treePanel.id, {
				handles : 'se',
				minWidth : 100,
				minHeight : 80,
				pinned : true
			});
			this.mon(this.resizer, 'resize', function(r, w, h) {
				this.treePanel.setSize(w, h);
				this.treePanel.getTopToolbar().get(0).setSize(w - 10, 18);
			}, this);
		},
		trigger1Class : 'x-form-clear-trigger',
		onTrigger1Click : function() {
			this.setRawValue('');
			this.setHiddenValue('');
		},
		onTrigger2Click : function() {
			this.treePanel.show();
			this.treePanel.getEl().alignTo(this.wrap, 'tl-bl?');
		},
		editable : false,
		storeAutoLoad : true,
		frstLoad : true,
		onTreeShow : function() {
			Ext.getDoc().on('mousewheel', this.collapseIf, this);
			Ext.getDoc().on('mousedown', this.collapseIf, this);
			if (this.storeAutoLoad && this.frstLoad) {
				this.store.load( {});
				this.frstLoad = false;
			}
		},
		onTreeHide : function() {
			Ext.getDoc().un('mousewheel', this.collapseIf, this);
			Ext.getDoc().un('mousedown', this.collapseIf, this);
		},
		collapseIf : function(e) {
			if (!e.within(this.wrap) && !e.within(this.treePanel.getEl())) {
				this.collapse();
			}
		},
		collapse : function() {
			this.treePanel.hide();
		},
		// private
		validateBlur : function() {
			return !this.treePanel || !this.treePanel.isVisible();
		},
		setValue : function(v) {
			this.setRawValue(v);
		},
		getValue : function() {
			return this.getRawValue();
		},
		setHiddenValue : function(v) {
			return this.hiddenField.value = v;
		},
		getHiddenValue : function() {
			return this.hiddenField.value;
		},
		getHiddenId : function() {
			return this.hiddenField.id;
		},
		onTreeNodeClick : function(node, e) {
			this.setRawValue(node.text);
			this.hiddenField.value = node.id
			this.fireEvent('select', this, node);
			this.collapse();
		},
		onRender : function(ct, position) {
			Ext.my.form.TreeComboBox.superclass.onRender.call(this, ct,
					position);
			if (!this.hiddenField) {
				this.hiddenField = this.getEl().insertSibling( {
					tag : 'input',
					type : 'hidden',
					name : this.name,
					value : this.hiddenValue,
					id : (this.hiddenId || this.name)
				}, 'before', true);
				this.getEl().dom.removeAttribute('name');
			}
		}

	});
})();
Ext.reg('treeComboBox', Ext.my.form.TreeComboBox);



new Ext.my.form.TreeComboBox({
storeRoot:"data",
renderTo:Ext.getBody(),
storeTotalProperty:"total",
dataUrl:"../Test/list.html",
root:new Ext.tree.TreeNode({
id:"Root",icon:"",text:"所有分類",leaf:false}),
fieldLabel:"選擇分類"})


后台数据
{"total":100,"data":
[
new Ext.tree.AsyncTreeNode({id:"9",icon:"",text:"aaa",
    children:[
        new Ext.tree.TreeNode({icon:"",text:"bbb",leaf:true})
    ],leaf:false}),
new Ext.tree.AsyncTreeNode({id:"1",icon:"",text:"aaa1",leaf:true}),
new Ext.tree.AsyncTreeNode({id:"2",icon:"",text:"aaa2",leaf:true})
]
}

分享到:
评论

相关推荐

    ExtJS4给Combobox设置列表中的默认值示例

    这个是model 代码如下: Ext.regModel(‘commemModel’, { fields : [ ‘name’, ‘id’ ] }); 定义一个store设置id为s1的容器的默认值是 第一季度 代码如下: var gjcx1 = new Ext.data.Store({ autoLoad:true, model...

    extJs3升级extjs4方案

    ExtJS3 升级到 ExtJS4 方案 ExtJS3 升级到 ExtJS4 需要修改大量代码,主要是因为 ExtJS4 配备了一类新的系统,不向后兼容。在 ExtJS 3 里生成表的几个框架组件,ExtJS4 大多生成 div,这使得 CSS classes 将会失败...

    extjs流程界面设计器参考_ExtJS工作流设计器_extjs工作流_extjs_

    ExtJS是一种广泛使用的JavaScript库,专门用于构建富客户端的Web应用程序。它提供了丰富的组件和工具,使得开发者可以创建出功能强大、用户界面友好的Web应用。在“extjs流程界面设计器参考”中,我们主要关注的是...

    轻松搞定Extjs 带目录

    本书作为Extjs的中文教程,旨在帮助读者快速上手Extjs,其内容涉及Extjs的基础知识和实际应用。 #### 2. JavaScript基础知识 - **类的定义**: Extjs中的类继承于JavaScript原生类,通过Ext.extend来定义。这是...

    ExtJs3.3中文API.CHM_extjs3.3中文文档_

    ExtJS是一个广泛使用的JavaScript库,专门用于构建富客户端应用程序。版本3.3是该库的一个稳定版本,提供了许多功能和组件,使得Web开发者能够创建功能丰富的、交互性强的用户界面。这个“ExtJS3.3中文API.CHM”文档...

    包含各种类型的extjs小图标,Extjs4小图标

    ExtJS 是一个流行的JavaScript框架,主要用于构建富客户端的Web应用程序。它提供了丰富的组件库、数据管理功能以及强大的用户界面(UI)元素。在标题和描述中提到的“Extjs4小图标”指的是ExtJS 4版本中使用的一系列...

    ExtJS 7.6 SDK trial

    ExtJS 是一个流行的JavaScript框架,用于构建富客户端的Web应用程序。它提供了丰富的用户界面组件、数据绑定机制和强大的API,使开发者能够创建功能强大的、响应式的桌面和移动应用。7.6版本是ExtJS的一个重要更新,...

    ExtJS快速入门 ExtJS快速入门 ExtJS快速入门

    ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门ExtJS快速入门 ExtJS快速入门 ExtJS...

    ExtJS经典皮肤集合

    ExtJS是一款功能强大的JavaScript前端框架,它为开发者提供了构建富客户端Web应用的工具。这款框架以其丰富的组件库、可定制的界面和强大的数据绑定机制而闻名。标题中的"ExtJS经典皮肤集合"指的是该框架中包含的一...

    Extjs 2.2 Extjs 3.21 js

    ExtJS是一种广泛使用的JavaScript库,专门用于构建富客户端Web应用程序。这个压缩包包含了ExtJS的两个重要版本:2.2和3.2.1。这两个版本在Web开发领域都有着广泛的运用,它们各自拥有不同的特性和改进,对于理解...

    EXTJS讲解个人项目经历

    EXTJS 是一个强大的JavaScript前端框架,它主要用于构建富客户端应用,提供丰富的用户界面组件和灵活的可定制性。EXTJS 的核心在于其组件化的架构,允许开发者构建复杂的UI布局和功能丰富的应用程序。以下是对EXTJS...

    extjs 3.4 开发前准备

    【EXTJS 3.4 开发前准备】 EXTJS 是一款强大的JavaScript库,主要用于构建桌面级的Web应用程序,提供丰富的用户界面组件和交互效果。3.4版本是EXTJS的一个重要里程碑,它提供了稳定的基础和丰富的组件库。本文将...

    ExtJS 界面设计器

    ExtJS是一款强大的JavaScript库,主要用于构建富客户端的Web应用程序。其界面设计器,正如标题所示,是一种可视化的开发工具,能够极大地提升开发效率和用户体验。这个工具允许开发者通过拖放组件和直观地调整属性来...

    extjs6.2 SDK下载

    EXTJS 6.2 SDK是EXT JavaScript库的一个版本,它是一个强大的前端开发框架,用于构建企业级的Web应用程序。EXTJS提供了丰富的组件库,包括数据管理、图表、表格、窗体和其他用户界面元素,使开发者能够创建功能丰富...

    extJS4升级至extJS6.6所遇问题及解决方案

    项目进行前端框架升级——extJS 4升级至extJS6.6所遇的一些问题及相对应的解决方案建议

    extjsapi/extjs3.4

    extjsapi,extjs文档,api手岫

    ExtJS4ExtJS5MD5 加密

    适用于ExtJS4、ExtJS5 MD5加密算法!

    extjs中文文档大全

    ExtJS是一种基于JavaScript的开源富客户端框架,用于构建桌面级的Web应用程序。它提供了一整套组件化的用户界面元素和强大的数据绑定机制,使得开发者能够创建功能丰富的、交互性强的Web应用。本文档集合包括了...

    extjs电子书,extjs电子书,extjs电子书

    extjs电子书,extjs电子书,extjs电子书,extjs电子书

    让我们开始EXTJS之旅EXTJS_WEB开发指南

    开始ExtJS之旅的第一步是要获得开发包,可以从官方网站www.ExtJS.com下载,以保证获 得最新版本。其下载地址是http://www.ExtJS.com/download,下载成功后的开发包是ExtJS- 2.0.2.zip,有6.08MB大。不过不用担心,这...

Global site tag (gtag.js) - Google Analytics