Extjs中ComboBoxTree实现的下拉框树效果(自写)

 更新时间:2013年05月28日 16:44:29   投稿:whsnow  
最近涉及到的一个项目中,需要实现ComboBoxTree的效果,由于在Extjs中是没有这种效果,所以看看别人的资料自己写了一个,感兴趣的朋友可以参考下哈

最近涉及到的一个项目中,需要实现ComboBoxTree的效果,首先,看看效果吧……
在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;
},
getValue: function () { //增加适用性,与原来combo组件一样
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,
iconCls: 'ico-root',
expanded: true,
leaf: false,
border: false,
draggable: false,
singleClickExpand: false,
hide: true
}),
loader: new Ext.tree.TreeLoader({
nodeParameter: 'ID',
requestMethod: 'GET',
dataUrl: _this.url
})
});
this.tree.on('click', function (node) {
if ((_this.selectMode == 'leaf' && node.leaf == true) || _this.selectMode == 'all') {
if (_this.fireEvent('beforeselect', _this, node)) {
_this.fireEvent('select', _this, node);
}
}
});
this.on('select', function (obj, node) {
var dispText = node.text;
var code = node.id;
obj.setHiddenValue(code, dispText);
obj.collapse();
});
this.on('expand', function () {
this.tree.render(tplRandomId);
});
Ext.ux.TreeCombo.superclass.initComponent.call(this);
}
})
Ext.reg("treecombo", Ext.ux.TreeCombo);

之后呢,在主页中添加Extjs类库
复制代码 代码如下:

<link href="../ext/resources/css/ext-all.css" rel="stylesheet" type="text/css" />
<script src="../ext/adapter/ext/ext-base.js" type="text/javascript"></script>
<script src="../ext/ext-all.js" type="text/javascript"></script>
<script src="../ext/src/locale/ext-lang-zh_CN.js" type="text/javascript"></script>
<script src="../ext/ComboBoxTree.js" type="text/javascript"></script>
<script src="login.js" type="text/javascript"></script>

其中,login.js的代码如下:
复制代码 代码如下:

/* File Created: 五月 27, 2013 */
Ext.onReady(function () {
var _window = new Ext.Window({
title: "查询条件",
renderTo: Ext.getBody(),
frame: true,
plain: true,
buttonAlign: "center",
closeAction: "hide",
maximizable: true,
closable: true,
bodyStyle: "padding:20px",
width: 350,
height: 300,
layout: "form",
lableWidth: 110,
defaults: { xtype: "textfield", width: 180 },

如此,上面所述的效果就实现了……

相关文章

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

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

    这篇文章主要介绍了ExtJS4如何给Combobox设置列表中的默认值,需要的朋友可以参考下
    2014-05-05
  • Extjs学习笔记之五 一个小细节renderTo和applyTo的区别

    Extjs学习笔记之五 一个小细节renderTo和applyTo的区别

    Extjs的组件有两个看起来类似的配置项,applyTo和renderTo,这两个配置项都是用来指定将该extjs组件加载到什么位置。那他们到底有什么区别呢,网上搜了下,有两篇博文也是关于这个的。
    2010-01-01
  • ExtJS GTGrid 简单用户管理

    ExtJS GTGrid 简单用户管理

    前段学了小胖的GTGrid,很方便实用。最近在学习Extjs.做了个CRUD的Demo,包括Extjs版和GTGrid版,做的比较粗糙,希望对大家有一些帮助。
    2009-07-07
  • Extjs Gird 支持中文拼音排序实现代码

    Extjs Gird 支持中文拼音排序实现代码

    本文为大家详细介绍下Extjs Gird 支持中文拼音排序以及修复汉字排序异常的Bug、localeCompare比较汉字字符串,Firefox与IE均支持,感兴趣的朋友可以参考下
    2013-04-04
  • Extjs 4.x 得到form CheckBox 复选框的值

    Extjs 4.x 得到form CheckBox 复选框的值

    CheckBox(复选框)主要用来接收用户选择的选项,那么如何通过Extjs 4.x 得到form CheckBox的值呢?下面有个不错的方法,大家值得一看
    2014-05-05
  • ExtJs GridPanel简单的增删改实现代码

    ExtJs GridPanel简单的增删改实现代码

    ExtJs GridPanel中实现增删改效果的代码,需要的朋友可以参考下。
    2010-08-08
  • extjs 学习笔记 四 带分页的grid

    extjs 学习笔记 四 带分页的grid

    很多时候,我们需要显示在grid中的数据不是短短的几条或者几十条,而是成千上万条。如果让大量的数据一股脑全都显示在一个页面中,可以想象会造成什么样的用户体验。
    2009-10-10
  • ExtJS中文乱码之GBK格式编码解决方案及代码

    ExtJS中文乱码之GBK格式编码解决方案及代码

    这几天做后台看了一些Ext的知识,在切入工作项目的时候出现了乱码情况,所以就总结了这篇ExtJS中文乱码之GBK格式编码解决办法的文章,遇到此问题的朋友可以参考一下,希望本文对你有所帮助
    2013-01-01
  • 学习ExtJS form布局

    学习ExtJS form布局

    ExtJS form布局使用说明,需要的朋友可以参考下。
    2009-10-10
  • ExtJS DOM元素操作经验分享

    ExtJS DOM元素操作经验分享

    这篇文章的主题是分享下我使用 ExtJS 操作 DOM 元素的一些经验,作为一个程序员是需要不断学习的,喜欢的朋友可以学习下
    2013-08-08

最新评论