您的位置:首页 > 其它

解决 Ext3.x 中 ComboboxTree 展开树时panel被关闭的bug

2011-07-13 14:12 323 查看
解决办法, 把ComboboxTree.js代码换成下面的:

Ext.form.ComboBoxTree = Ext.extend(Ext.form.ComboBox, {
store: new Ext.data.SimpleStore({ fields: [], data: [[]] }),
editable: false,
shadow: false,
mode: 'local',
triggerAction: 'all',
selectedClass: '',
onSelect: null,
canCollapse: true,
constructor: function(_cfg) {
if (_cfg == null) {
_cfg = {};
}
Ext.apply(this, _cfg);
this.treerenderid = Ext.id();
this.tpl = String.format('<tpl for="."><div style="height:200px"><div id="ext-combobox-tree{0}"></div></div></tpl>', this.treerenderid);
Ext.form.ComboBoxTree.superclass.constructor.apply(this, arguments);
if (this.tree) {
var cmb = this;
this.tree.on('click', function(node) {
cmb.canCollapse = true;
if (Ext.isFunction(cmb.onSelect)) {
cmb.onSelect(cmb, node);
} else {
cmb.setValue(node.text);
if (cmb.hiddenField) {
cmb.hiddenField.value = node.id;
}
}
cmb.collapse();
});
//以下事件,让combobox能正常关闭
this.tree.on('expandnode', function() { cmb.canCollapse = true; });
this.tree.on('beforeload', function() { cmb.canCollapse = false; });
this.tree.on('beforeexpandnode', function() { cmb.canCollapse = false; });
this.tree.on('beforecollapsenode', function() { cmb.canCollapse = false; });
}
this.on('expand', this.expandHandler, this);
this.on('collapse', this.collapseHandler, this);
},
expandHandler: function expand() {
this.canCollapse = true;
if (this.tree) {
this.tree.render('ext-combobox-tree' + this.treerenderid);
this.canCollapse = true;
this.tree.getRootNode().expand();

}
},
collapseHandler: function collapse() {
if (!this.canCollapse) {
this.expand();
}
}

});
Ext.reg('combotree', Ext.form.ComboBoxTree);

调用代码:
new Ext.form.ComboBoxTree({
id: 'mytree',
hiddenName:'dept_no',
fieldLabel:'机构',
tree: new Ext.tree.TreePanel({
root: new Ext.tree.AsyncTreeNode({ text: '--选择--', id: '0' }),
rootVisible: false,
border: false,
dataUrl: '/AreaList.aspx',
listeners: {
beforeload: function(n) { if (n) { this.getLoader().baseParams.id = n.attributes.id; } }
}
})/*,
onSelect: function(cmb, node) {
alert(node.attributes.text);
}*/
})
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: