菜單的種類很多,包括下拉菜單、分組菜單、右鍵菜單等等,右鍵菜單與Window桌面上單擊右鍵彈出的菜單效果一樣,只是樣式不同,菜單上的內(nèi)容包括文字、單選框、按鈕等。對(duì)于EXT來說,這些菜單的實(shí)現(xiàn)都非常簡(jiǎn)單。
我們可以在一個(gè)面板的頂端或底端放置一橫排功能按鈕,按下不同的按鈕時(shí)會(huì)執(zhí)行不同的操作。我們把這個(gè)橫條稱為工具條,放在工具條上的按鈕稱為菜單。本章將詳細(xì)介紹EXT中工具欄和菜單的使用方法。
一、簡(jiǎn)單菜單
創(chuàng)建一個(gè)簡(jiǎn)單工具條的方法如下,注意的一點(diǎn)是HTML代碼必須要有:<div id="toolbar"></div>
過程大致包括:先創(chuàng)建一個(gè)工具條,用工具條的render()函數(shù)把它渲染在DIV上,然后調(diào)用Toolbar的add函數(shù),向Toolbar添加 4個(gè)按鈕,同時(shí)還可以添加單擊處理事件。
- Ext.onReady(function(){
- var tb=new Ext.Toolbar();
- tb.render('toolbar');
- tb.add({
- text:"新建N",
- handler:function(){
- Ext.Msg.alert('提示','新建');
- }
- },{
- text:"修改C"
- },{
- text:"刪除"
- },{
- text:"顯示"
- });
- });
效果如圖1所示:
圖1 簡(jiǎn)單的工具條
二、向菜單中添加分隔線
分隔線顯示就是一條水平線,可以使用它將菜單中不同類型的菜單項(xiàng)分隔顯示,Ext中向菜單中添加分隔線的方式有兩種。
1、使用連字符或'separator'作為參數(shù),如下面的代碼所示:
- var menu1=new Ext.menu.Menu({
- items:[
- {text:'菜單一'},
- {text:'菜單二'}
- ]
- });
- //menu1.add('-');
- menu1.add('separator');
- var tb=new Ext.Toolbar();
- tb.render('toolbar');
- tb.add({
- text:'新建',
- menu:menu1
- });
2、用Ext.menu.Separator的實(shí)例作為參數(shù),如下面的代碼所示:
- menu1.add(new Ext.menu.Separator());
具體效果如圖2所示:
圖2.1 無分隔線效果
圖2.2 具有分隔線效果
三、多級(jí)菜單
下拉菜單可以嵌套,而且嵌套的層數(shù)似乎任意的,我們先來看一個(gè)兩層結(jié)構(gòu)的菜單,實(shí)現(xiàn)方法很簡(jiǎn)單,只要在下拉菜單中再加一個(gè)menu菜單參數(shù)并指定對(duì)應(yīng)的下級(jí)菜單即可,如下面代碼所示:
- var menuHistory=new Ext.menu.Menu({
- items:[
- {text:'今天'},
- {text:'昨天'},
- {text:'一周'},
- {text:'一年'}
- ]
- });
- var menuFile=new Ext.menu.Menu({
- items:[{
- text:'新建'
- },{
- text:'打開'
- },{
- text:'保存'
- },{
- text:'歷史',menu:menuHistory
- },{
- text:'關(guān)閉'
- }]
- });
- var tb=new Ext.Toolbar();
- tb.render('toolbar');
- tb.add({
- text:'文件',
- menu:menuFile
- });
實(shí)現(xiàn)效果圖如下所示:
圖3 兩層結(jié)構(gòu)的嵌套菜單
在上面的實(shí)例中,我們可以直接使用menu參數(shù)指定在菜單的哪個(gè)部分加上子菜單。利用這些方法,我們就可以輕易實(shí)現(xiàn)自己想要的功能菜單了。
四、高級(jí)菜單
除了上面提到的最基本的菜單按鈕,EXT還為我們提供了一些功能比較復(fù)雜的菜單控件,供我們直接調(diào)用,本節(jié)將詳細(xì)介紹這些高級(jí)菜單的使用方法和實(shí)例。
4.1 多選菜單和單選菜單
我們使用Ext.menu.CheckItem來創(chuàng)建多選菜單,text參數(shù)表示菜單上顯示的文字,checked參數(shù)表示當(dāng)前菜單項(xiàng)是否被選中.checkHandler用來指定選中菜單時(shí)執(zhí)行的處理菜單.單選菜單也基本類似,具體使用代碼如下:
- var menuCheckbox=new Ext.menu.Menu({
- items:[
- new Ext.menu.CheckItem({
- text:'粗體',
- checked:true,
- checkHandler:function(item,checked){
- Ext.Msg.alert('多選',(checked?'選中':'取消')+'粗體');
- }
- }),
- new Ext.menu.CheckItem({
- text:'斜體 ',
- checked:true,
- checkHandler:function(item,checked){
- Ext.Msg.alert('多選',(checked?'選中':'取消')+'斜體');
- }
- })
- ]
- })
- var tb=new Ext.Toolbar();
- tb.render('toolbar');
- tb.add({
- text:'字體',
- menu:menuCheckbox
- });
效果圖如圖4所示
圖4 多選菜單
4.2 時(shí)間菜單
EXT為我們提供了選擇日期的菜單Ext.menu.DateMenu,它可以讓我們直接把日期選擇功能加入到菜單中,實(shí)現(xiàn)的代碼如下:
- tb.add({
- text:'日期',
- menu:new Ext.menu.DateMenu({
- handler:function(dp,date){
- Ext.Msg.alert('選擇日期','你選擇的日期是 {0}.',date.format('Y年m月d日'));
- }
- })
- });
注意,這時(shí)Ext.menu.DateMenu時(shí)一個(gè)Menu而不是MenuItem,使用時(shí)應(yīng)該用menu參數(shù)將它設(shè)置成上級(jí)菜單的子菜單。實(shí)現(xiàn)的效果圖如圖5所示。
圖5 日期菜單
4.3 顏色菜單
EXT為我們提供了選擇顏色的功能菜單Ext.menu.ColorMenu,效果圖如圖6所示。
圖6 顏色菜單
顏色選擇菜單雖然不常用,但它的效果十分絢麗,它的用法與日期菜單相似,也有特定的handler,如下面代碼所示:
- tb.add({
- text:'顏色',
- menu:new Ext.menu.ColorMenu({
- handler:function(cm,color){
- if(typeof color=='string'){
- Ext.Msg.alert('選擇顏色','選擇的顏色是'+color);
- }
- }
- })
- });
五、小結(jié)
本章主要介紹如何創(chuàng)建工具條和菜單,以及如何使用下拉菜單和分級(jí)菜單對(duì)我們需要的功能按鈕進(jìn)行分組顯示,除此之外,還關(guān)于高級(jí)菜單進(jìn)行了分析。至于分頁(yè)控件Ext.PagingToolbar的使用方法在后面的章節(jié)會(huì)給出介紹。