`

用Ext做菜单式的Combox

阅读更多
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
分享到:
评论
1 楼 mandyyuan 2008-11-24  
会用ext啊,不错哇哦

相关推荐

    Ext 将grid渲染到combox

    从 `ComboBox` 的源代码来看,如果未定义 `tpl` 属性,则会使用默认的 XTemplate 生成下拉菜单项,其中默认会显示 `displayField` 对应的数据字段。而通过自定义 `tpl` 属性,我们可以完全控制下拉菜单的展示形式。 ...

    Extjs 下拉菜单实现拼音输入进行检索

    Extjs 下拉菜单实现拼音输入进行检索

    Extjs4下拉菜单ComboBox中用Grid显示通用控件

    在某些场景下,我们可能需要在下拉菜单中展示更丰富的信息,比如表格数据,这时就可以使用 `GridComboBox`。`GridComboBox` 结合了 `ComboBox` 和 `GridPanel` 的特性,允许用户在一个下拉菜单中浏览和选择多行数据...

    comboxTree下拉树,实现单选功能

    在EXT JS框架中,ComboxTree是一种特殊的组件,它结合了ComboBox(下拉框)和TreePanel(树形面板)的功能,允许用户从一个可展开的树形结构中选择单个项。本代码示例专注于实现ComboxTree的单选功能,即用户只能...

    Ext用户扩展控件 ------超级下拉列表控件支持多选,删除,添加

    使用UxSuperBoxSelect之前,最好查阅其官方文档或社区提供的教程和示例,了解其完整功能和使用方法,以便更好地将其应用于项目中。 总之,UxSuperBoxSelect是一个强大且灵活的用户扩展控件,它增强了标准的下拉...

    ExtJS 设置级联菜单的默认值

    本文将详细介绍如何使用ExtJS框架设置级联菜单的默认值。首先,需要明白在ExtJS中设置普通控件(如文本框)的默认值相对简单,通常只用一行代码即可完成。然而,对于ComboBox(下拉列表组件)来说,情况就没那么简单...

Global site tag (gtag.js) - Google Analytics