Ext提供了Combox,也提供了Menu做多级菜单。下面的代码把二者组合起来,形成一个带多级菜单的Combox。效果图如附件。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css" />
<script type="text/javascript" src="ext/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="ext/ext-all.js"></script>
<script>
var metawork={};
metawork.searchFieldsCache = new Object();
var dataFields = [
{
id:"title",
name:"标题",
type:"string"
},{
id:"id",
name:"标识",
type:"int"
},{
id:"organization",
name:"所属机构",
type:"",
children:[ //代表子属性
{
id:"id",
name:"标识",
type:"int"
},{
id:"id",
name:"名称",
type:"string"
}
]
}
];
var fieldsEditor = new Ext.form.ComboBox({
store:new Ext.data.SimpleStore({fields:[],data:[[]]}),
displayField:'name',
mode: 'local',
editable:false,
triggerAction: 'all',
tpl: '<div id="fieldsMenu"></div>'
});
var fieldMenu = new Ext.menu.Menu({
id: 'fieldsRootMenu',
minWidth:150
});
Ext.menu.DynamicItem = function(config){
Ext.menu.DynamicItem.superclass.constructor.call(this, config);
this.on("click",function(m,e){
fieldsEditor.setValue(m.fullText||m.text);
});
};
Ext.extend(Ext.menu.DynamicItem, Ext.menu.Item, {
// private
expandMenu : function(autoActivate){
if(!this.disabled && this.menu){
clearTimeout(this.hideTimer);
delete this.hideTimer;
if(!this.menu.isVisible() && !this.showTimer){
//如果有chldren属性并且还没有装载,那么装载之
if(this.children && this.children.length>0 && this.menu.items.length == 0){
for(var index=0;index<this.children.length;index++){
var item = this.children[index];
this.menu.add(new Ext.menu.DynamicItem({
text:item.name,
menu:item.children?{items:[]}:null,
children:item.children,
fullText:this.text + "_" + item.name,
url:item.url
}));
}
}
this.showTimer = this.deferExpand.defer(this.showDelay, this, [autoActivate]);
}else if (this.menu.isVisible() && autoActivate){
this.menu.tryActivate(0, 1);
}
}
}
});
for(var i = 0;i<dataFields.length;i++){
var item = dataFields[i];
fieldMenu.add(new Ext.menu.DynamicItem({
text:item.name,
menu:item.children?{items:[]}:null,
children:item.children
}));
}
fieldsEditor.on('expand',function(){
fieldMenu.show(Ext.get("fieldsMenu"));
});
</script>
</HEAD>
<BODY onload="fieldsEditor.render('fieldEditor')">
<div id="fieldEditor"></div>
</BODY>
</HTML>
- 大小: 6.5 KB
- 大小: 31.4 KB
分享到:
相关推荐
EXTjsEXT中COMBOX联动EXT中COMBOX联动EXT中COMBOX联动EXT中COMBOX联动EXT中COMBOX联动
ext combox自动提示 仿百度式自动提示
Ext中使用combox实现模糊查询,内附详细代码与图片!
ext + mvc combox tree grid layout
extcombox搜索功能
有时候我们需要在combo中渲染grid,这时候我们可以通过ext的模板xtemplate来实现此功能。
combox下拉树combox下拉树combox下拉树combox下拉树combox下拉树combox下拉树combox下拉树
combox的栏数如何生成?
简单的实现了两个combox之间的二级联动,代码可以直接运行。
combox 实现搜寻功能combox 实现搜寻功能
用html的格式,往combox加载数据项,方便用户对每项数据的大小字体颜色图片等的控制
WPF之MVVM中DataGrid中嵌入Combox,改变Combox可回传至绑定的实体
js 实现combox 树选择 js 实现combox 树选择
DataGrid中嵌入comBox,MVVM,
javafx combox内嵌checkbox
今天突然遇到ComBox选项长度过长问题.. 故重绘实现ComBox选项过长换行问题.
android只有Spinnser控件 没有像其他语言的combox控件 故写了个自定义combox 控件
VC重绘 combox 小样例。分享学习
HtmlCombox