简单菜单

// 创建工具条
var  tb  =   new  Ext.Toolbar();
tb.render('toolbar');

// 为工具条添加按钮
tb.add( {
    text:'新建',
    
//对应的事件处理函数
    handler:function(){
        alert('提示', '新建');
    }

}
, {
    text:'修改'
}
);
    
    向菜单添加分隔线也有两种方法:
        menuFile.add('-')            menuFile.add('separator')
        menuFile.add(new Ext.menu.Separator())

多级菜单
    
下拉多级菜单就是工具条上添加一个嵌套菜单的菜单,如:
 1 var  menuhistory  =   new  Ext.menu.Menu( {
 2    items:[
 3        {text:'今天'},
 4        {text:'昨天'},
 5        {text:'一周'},
 6        {text:'一月'}
 7    ]
 8}
);
 9
10 var  menu1  =   new  Ext.menu.Menu( {
11    items:[
12        {text:'新建'},
13        {text:'打开'},
14        {text:'保存'},
15        {text:'另存'},
16        '-',
17        {text:'历史',menu:menuhistroy},
18        '-',
19        {text:'关闭'}
20    ]
21}
);
22
23 var  tb  =   new  Ext.Toolbar();
24 tb.render('toolbar');
25
26 tb.add( {
27    text:'文件',
28    menu:menu1
29}
);
30

高级菜单
   
 下列示例展现了多选菜单和单选菜单,两者唯一不同的是group参数。
 1 var  menuCheckbox  =   new  Ext.menu.Menu( {
 2    items:[
 3        new Ext.menu.CheckItem({
 4            text:'粗体',
 5            checked:true,
 6            checkHandler:function(item,checked){
 7                Ext.Msg.alert('多选',(checked?'选中':'取消') + '粗体');
 8            }

 9        }
),
10        new Ext.menu.CheckItem({
11            text:'斜体',
12            checked:true,
13            checkHandler:function(item,checked){
14                Ext.Msg.alert('多选',(checked?'选中':'取消') + '斜体');
15            }

16        }
)
17    ]
18}
);
19
20 var  menuRadio  =   new  Ext.menu.Menu( {
21    items:[
22        new Ext.menu.CheckItem({
23            text:'宋体',
24            group:'font',
25            checked:true,
26            checkHandler:function(item,checked){
27                Ext.Msg.alert('多选',(checked?'选中':'取消') + '宋体');
28            }

29        }
),
30        new Ext.menu.CheckItem({
31            text:'楷体',
32            group:'font',
33            checked:true,
34            checkHandler:function(item,checked){
35                Ext.Msg.alert('多选',(checked?'选中':'取消') + '楷体');
36            }

37        }
),
38        new Ext.menu.CheckItem({
39            text:'黑体',
40            group:'font',
41            checkHandler:function(item,checked){
42                Ext.Msg.alert('多选',(checked?'选中':'取消') + '黑体');
43            }

44        }
)
45    ]
46}
);
47
48 var  tb  =   new  Ext.Toolbar();
49 tb.render('toolbar');
50
51 tb.add( {
52        text:'多选',
53        menu:menuCheckbox
54    }
, {
55        text:'单选',
56        menu:menuRadio
57    }
)
58 });

    如果菜单中需要添加日期,则如下:
1 tb.add( {
2    text:'日期',
3    menu:new Ext.menu.DateMenu({
4        handler:function(dp,date){
5            Ext.Msg.alert('选择日期','选择的日期是{0}',date.format('Y年m月d日'));
6        }

7    }
)
8}
);

    颜色选择菜单虽然并不常用,但有时却必须:
 1 tb.add( {
 2    text:'颜色',
 3    menu:new Ext.menu.ColorMenu({
 4        handler:function(cm,color){
 5            if (typeof color == 'string')
 6            {
 7                Ext.Msg.alert('选择颜色','选择的颜色是' + color);
 8            }

 9            
10        }

11    }
)
12}
);


Ext.menu.Adapter菜单适配器
    如果我们在菜单中需要添加一个表单,则有两种方法:
    
    
方法一:直接创建Ext.menu.Adapter的实例
 1 var  form  =   new  Ext.form.FormPanel( {
 2    title:'输入',
 3    frame:true,
 4    defaultType:'textfield',
 5    labelWidth:50,
 6    items:[{
 7        fieldLabel:'名称',
 8        name:'name'
 9    }
],
10    buttons:[{
11        text:'确认'
12    }
,{
13        text:'取消'
14    }
]
15}
);
16
17 var  formItem  =   new  Ext.menu.Adapter(form, {
18    hideOnClick:false
19}
);
20
21 var  tb  =   new  Ext.Toolbar();
22 tb.render('toolbar');
23
24 tb.add( {
25    text:'表单菜单',
26    menu:new Ext.menu.Menu({items:[formItem]})
27}
);
28
29

    hideOnClick:true的功能是在鼠标单击菜单中的表单时,菜单不会自动隐藏。

    第二种方式是定义继承Ext.menu.Adapter的子类
 1 Ext.ux.FormMenuItem  =   function (config)  {
 2    config = config || {};
 3    Ext.applyIf(config, {
 4        hideOnClick:false
 5    }
)
 6    var form = new Ext.form.FormPanel({
 7        title:'输入',
 8        frame:true,
 9        defaultType:'textfield',
10        labelWidth:50,
11        items:[{
12            fieldLabel:'名称',
13            name:'name'
14        }
],
15        buttons:[{
16            text:'确认'
17        }
,{
18            text:'取消'
19        }
]
20    }
);
21    Ext.ux.FormMenuItem.superclass.constructor.call(this,form,config);
22}

23 Ext.extend(Ext.ux.FormMenuItem,Ext.menu.Adapter);
24
25 var  tb  =   new  Ext.Toolbar();
26 tb.render('toolbar');
27
28 tb.add( {
29    text:'表单菜单',
30    menu:new Ext.menu.Menu({items:[new Ext.ux.FormMenuItem()]})
31}
);
32

    config = config || {};这条语句负责检测config参数是否为空,如果不为空,config依然等于原值,否则设置为空对象。
    在保证config不为空后,使用Ext.applyIf()函数为一些参数设置初始值。

使用Ext.menu.MenuMgr统一管理菜单
    
Ext为我们提供了MenuMgr来统一管理页面上所有的菜单。每创建一个菜单都会自动注册到Ext.menu.MenuMgr中,可以使用Ext.menu.MenuMgr提供的函数对菜单进行操作。Ext.menu.MenuMgr是一个单例,我们不必创建它的实例就可以直接调用它的功能函数get(),根据id获得对应的菜单。