自己写ExtJS 4控件: Combobox内嵌入Tree
来源:互联网 发布:淘宝开店多少钱 编辑:程序博客网 时间:2024/05/17 08:56
Combobox内嵌入Tree,网上很多代码,但大多属于ExtJS 2或ExtJS 3,我没有找到适用于ExtJS 4的代码,由于ExtJS 4变化蛮大,所以网上的代码都不能直接使用,不过没关系,自己写吧
看了网上的示例代码,其实只要注意几点即可
1、为Combobox的tpl插入一个带有id的div
tpl ='<div id="tree"></div>'
2、写Combobox的expand事件
当Combobox展开的时候,要让tree展现到我们之前设置div内
这里要注意一个问题,需要判断,如果tree已经展现过了,则不要重复render
me.on('expand', function () { if (!this.tree.rendered) { this.tree.render(this.treeid); }});
3、写tree的itemclick事件,实现tree选择之后给Combobox赋值
首先要设置Combobox的displayField的值
this.displayField = this.displayField || 'text'
然后完成tree的itemclick事件,查API知道,itemclick的function如下
itemdblclick( Ext.view.View this, Ext.data.Model record, HTMLElement item, Number index, Ext.EventObject e, Object eOpts )
我们只需要用到前面2个参数即可,代码如下
this.tree.on('itemclick', function (view, record) { me.setValue(record); me.collapse();//关闭combobox});
我已经把嵌套tree的combobox写成了一个component,完整代码如下
Ext.define('TreeComboBox', { extend: 'Ext.form.field.ComboBox', url: '', tree: {}, textProperty: 'text', valueProperty: '', initComponent: function () { Ext.apply(this, { editable: false, queryMode: 'local', select: Ext.emptyFn }); this.displayField = this.displayField || 'text', this.treeid = Ext.String.format('tree-combobox-{0}', Ext.id()); this.tpl = Ext.String.format('<div id="{0}"></div>', this.treeid); if (this.url) { var me = this; var store = Ext.create('Ext.data.TreeStore', { root: { expanded: true }, proxy: { type: 'ajax', url: this.url } }); this.tree = Ext.create('Ext.tree.Panel', { rootVisible: false, autoScroll: true, height: 200, store: store }); this.tree.on('itemclick', function (view, record) { me.setValue(record); me.collapse(); }); me.on('expand', function () { if (!this.tree.rendered) { this.tree.render(this.treeid); } }); } this.callParent(arguments); }});
前台代码
Ext.create('TreeComboBox', { renderTo: Ext.getBody(), width: 400, url: '/models/tree-data.json'});
无图无真像,效果截图
由于有了这个思路,那我们可以很容易的制作嵌入grid的combobox,而且也可以配合tree的filter,实现combobox的filter效果,这里特别指出,由于ExtJS 4去掉了TreeFitler,要实现fitler还比较麻烦,所以最简单的就是我们自己写一个treefilter,在完全完成这个treecombobox后,我会奉上完整代码
- 自己写ExtJS 4控件: Combobox内嵌入Tree
- Combobox内嵌入Tree
- ComboBoxTree--tree控件嵌入combobox
- 自己写的EXTJS 增强控件TableGrid
- Extjs 让combobox写起来更简单
- extjs中grid中嵌入动态combobox的应用
- C# 代码写ComboBox控件
- Extjs Ext.form.ComboBox() 控件分页
- Extjs ComboBox
- Extjs ComboBox
- Extjs 例子:下拉菜单combobox 窗口window 树tree
- MFC——LIstCtrl中嵌入Edit和Combobox控件
- MFC——LIstCtrl中嵌入Edit和Combobox控件
- ExtjS的window内嵌入iframe的使用方法
- Extjs中Combobox在修改的时候回写不成功
- VB.Net自己写的一个控件:ComboBox下拉列表中显示多列数据(可以绑定数据表)
- ExtJS :ComboBox控件不能选中问题的 解决方案
- 自己写的HTML嵌入Android项目,运用webview控件与Fragment与activity之间的传值
- 如何切换到root用户 --- 终端命令行方式
- 封装dao层中的简单问题
- 网络编程之Socket编程基础
- ssh免密码登陆
- 关于#import和@class的区别
- 自己写ExtJS 4控件: Combobox内嵌入Tree
- Bulk Rename Utility 2.7.1.2 汉化版
- DevExpress.XtraGrid 分组
- mysql alter 语句用法,添加、修改、删除字段等
- 3种容器的特点分析
- 《财富》专访杰夫·维纳:LinkedIn上市一年后如何自保并持续扩张
- 周鸿祎雷军口水战 360特供机上市将考验小米
- Redis指令文档
- weblogic10.3命令行的安装和配置