1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
Ext.require([ 'Ext.tree.*' , 'Ext.data.*' , 'Ext.window.MessageBox' ]);
Ext.define( "Ext.ux.comboboxtree" , {
extend : "Ext.form.field.Picker" ,
requires : [ "Ext.tree.Panel" ],
initComponent : function () {
var self = this ;
Ext.apply(self, { fieldLabel : self.fieldLabel, labelWidth : self.labelWidth // pickerAlign : "tl"//悬浮到其上面 }); self.callParent(); },
createPicker : function () {
var self = this ;
var store = Ext.create( 'Ext.data.TreeStore' , {
proxy : { type : 'ajax' ,?
url : self.storeUrl }, sorters : [{ property : 'leaf' ,
direction : 'ASC'
}, { property : 'text' ,
direction : 'ASC'
}] });
self.picker = new Ext.tree.Panel({
height : 300 ,
autoScroll : true ,
floating : true ,
focusOnToFront : false ,
shadow : true ,
ownerCt : this .ownerCt,
useArrows : true ,
store : store, rootVisible : false
}); self.picker.on({ beforehide : function (p) {
var records = self.picker.getView().getChecked(), names = [];
Ext. Array . each (records, function (rec) {
names.push(rec. get ( 'text' ));
});
// Ext.MessageBox.show({ // title : 'Selected Nodes',
// msg : names.join('<br />'),
// icon : Ext.MessageBox.INFO
// });
// alert(names.join(','));
self.setValue(names.join( ',' ));
p.setVisible( true ); // 隐藏树
} });
return self.picker;
},
alignPicker : function () {
// override the original method because otherwise the height of // the treepanel would be always 0
var me = this , picker, isAbove, aboveSfx = '-above' ;
if ( this .isExpanded) {
picker = me.getPicker(); if (me.matchFieldWidth) {
// Auto the height (it will be constrained by min and // max width) unless there are no records to display.
picker.setWidth(me.bodyEl.getWidth()); }
if (picker.isFloating()) {
picker.alignTo(me.inputEl, "" , me.pickerOffset); // ""->tl
// add the {openCls}-above class if the picker was
// aligned above
// the field due to hitting the bottom of the viewport
isAbove = picker.el.getY() < me.inputEl.getY(); me.bodyEl[isAbove ? 'addCls' : 'removeCls' ](me.openCls
+ aboveSfx); picker.el[isAbove ? 'addCls' : 'removeCls' ](picker.baseCls
+ aboveSfx); }
}
}
}); Ext.onReady( function () {
var com = Ext.create( "Ext.ux.comboboxtree" , {
storeUrl : 'check-nodes.json' ,
width : 270 ,
fieldLabel : '行政区划' ,
labelWidth : 60 ,
renderTo : 'tree-div'
}); });
http: //www.sencha.com/forum/showthread.php?132328-CLOSED-ComboBox-using-Grid-instead-of-BoundList
|
本文转自yunlielai51CTO博客,原文链接:http://blog.51cto.com/4925054/1362575,如需转载请自行联系原作者