Extjs ComboBox Tree
2年多不来博客园了,呵呵,很想念
N多人想用这个,以前项目用到了,代码如下
实现效果如下:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1
Ext.onReady(function()
2![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
3
//自定义扩展一个带Tree的comboBox
4![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Ext.ux.LovTreeCombo = Ext.extend(Ext.form.ComboBox,
{
5![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
initList: function()
{
6![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
this.list = new Ext.tree.TreePanel(
{
7
floating: true,
8
autoHeight: false,
9
autoExpand: true,
10
height: 240,
11
rootVisible: false,
12
containerScroll: true,
13
dataUrl: this.url,
14![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
root:
{
15
nodeType: 'async',
16
text: 'root',
17
draggable: false,
18
id: 'root'
19
}
20
,
21![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
listeners:
{
23
checkchange: this.onNodeCheckChange,
24
scope: this
25![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
26
},
27
useArrows: true,
28![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
alignTo: function(el, pos)
{
29
this.setPagePosition(this.el.getAlignToXY(el, pos));
30
}
31
});
32![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
},
34![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
35![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
expand: function()
{
36![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (!this.list.rendered)
{
37
this.list.render(document.body);
38
this.list.setWidth("660px");
39
this.innerList = this.list.body;
40
this.list.hide();
41
}
42
this.el.focus();
43
Ext.ux.LovTreeCombo.superclass.expand.apply(this, arguments);
44
},
45![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
46![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
doQuery: function(q, forceAll)
{
47
this.expand();
48
},
49![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
50![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
collapseIf: function(e)
{
51![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (!e.within(this.wrap) && !e.within(this.list.el))
{
52
this.collapse();
53
}
54
},
55![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
56
valueList: [],
57
textList: [],
58![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
getvalueList: function()
{
60
return this.valueList;
61
},
62![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
63![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
onNodeCheckChange: function(node, e)
{
64![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (!node.leaf)
{
65![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
node.expand(true, false, function()
{
66![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
node.eachChild(function(child)
{
67
child.ui.toggleCheck(node.attributes.checked);
68
child.attributes.checked = node.attributes.checked;
69
child.fireEvent('checkchange', child, node.attributes.checked);
70
});
71![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
72
});
73![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
74
}
75![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
else
{
76
//alert(1)
77
var nodeValue = node.id;
78
var test = this.valueList.indexOf(nodeValue);
79![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
80![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (test == -1 && node.attributes.checked)
{
81
this.valueList.push(nodeValue)
82
this.textList.push(node.text);
83
}
84![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
85![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (test != -1 && !node.attributes.checked)
{
86
this.valueList.remove(nodeValue);
87
this.textList.remove(node.text);
88
}
89![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
90
//if(window.console){console.log(this.valueList.toString())}共选择了'+this.valueList.length.toString()+'菜单:'+
91
var str = this.textList.toString();
92
this.setRawValue(str);
93![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
94![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
95![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (this.hiddenField)
{
96
this.hiddenField.value = node.id;
97
}
98
}
99
//this.collapse();
100
},
101
url: '',
102![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
reset: function()
{
103![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
104
this.valueList.length = 0;
105
this.textList.length=0;
106
this.applyEmptyText();
107![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
108
},
109![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
110![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
111![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
resetNode: function(node)
{
112
this.collapseNode(node);
113
this.uncheckNode(node);
114
},
115![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
116![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
collapseNode: function(node)
{
117![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (node.isExpanded())
{
118
node.collapse();
119
}
120
},
121![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
122![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
uncheckNode: function(node)
{
123![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
124![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (node.getUI().isChecked())
{
125![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (window.console)
{ console.log("未能选中此节点ID " + node.attributes.id) }
126![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
127
node.getUI().toggleCheck(false);
128
}
129
}
130![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
131![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
132
});
133
134
//这边注册一下子
135
Ext.reg('treecombo', Ext.ux.LovTreeCombo);
136![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
137
//这边是使用方法
138![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
var lovTreeCombo2 = new Ext.ux.LovTreeCombo(
{
139
id:'cmb',
140
renderTo: 'cmb',
141
url: 'LoadTreeMenu.aspx ',
142
emptyText: '选择类型',
143
width: 660,
144
listWidth: 180
145
});
146
147
})