簡單菜單應用
  菜單包括很多種,比如下拉菜單、分組菜單位、上下文件彈出菜單位,菜單上的內容包括文件、單選框、按鈕等。對于ExtJS來說,菜單的實現非常簡單,我們來看下面示例。
Html代碼如下:

歡迎進入管理系統<br/>
<div id="menu"></div>
 我們想在id為menu的這一區域里面顯示系統的主菜單,應用ExtJS,則可以使用下面的javascript代碼實現:
 var btn1=new Ext.Button({
 text:"文件",
 menu:[
  {icon:"open.jpg",text:"打開"},
  {icon:"save.jpg",text:"保存"},
  {text:"關閉"}]});
var btn2=new Ext.Button({
 text:"編輯",
 menu:[
  {text:"復制"},
  {text:"拷貝"},
  "-",
  {text:"查找"},
  {text:"替換"}
 ] 
})
var toolbar=new Ext.Toolbar({
 renderTo:"menu",
 items:[btn1,btn2]
});


   在上面的代碼中,我們首先創建了兩個普通的按鈕Button,注意構造參數中的配置選項除了text以外,還包含一下menu屬性,menu屬性是一個數組,數組中的每一項就是一個菜單項;兩個包含了菜單的按鈕創建完以后,我們使用new Ext.Toolbar直接創建一個簡單工具欄控件,指定工具欄渲染到id為menu的DOM元素,并且工具欄中包含兩個按鈕。執行上面的代碼,可以得到如圖11-1所示的效果。


 
  圖11-1 鼠標移到“文件”按鈕時顯示的下拉菜單

 
  圖11-2 鼠標移到“編輯”按鈕時顯示的下拉菜單

 手動創建及顯示菜單
  當然,對于給包含menu屬性的控件添加菜單非常容易,由于這些控件已經自動添加了菜單處理及顯示的代碼。對于沒有提供菜單支持的控件來說,我們可以直接使用ExtJS中的菜單組件Ext.menu.Menu來實現顯示菜單。
  在ExtJS中,菜單項由Ext.menu.Item類定義,該類直接繼承自Ext.menu.BaseItem,我們只需創建一個菜單Menu對象,然后往Menu對象中加入菜單項,然后在需要顯示菜單的時候調用菜單Menu對象的show或showAt方法即可在指定位置顯示菜單。我們再來看下面的示例。
假如頁面中html代碼如下:
<br/>
<div id="hello" style="cursor:pointer">顯示菜單</div>

  現在我們要實現在用戶點擊“顯示菜單”這一個div時,顯示一個包含“文件”、“編輯”等項的下拉菜單,下面的javascript代碼實現了該功能:

var menu=new Ext.menu.Menu();
 menu.add(
{
  text:
"文件",
  menu:[
   
{text:"打開"},
   
{text:"保存"},
   
{text:"關閉"}]
  }
,
  
{
  text:
"編輯",
  menu:[
   
{text:"復制"},
   
{text:"拷貝"}]
  }

 );
 
var h=Ext.get("hello");
 h.on(
"click",function(e){
  menu.show(h);
 }

 );



  在上面的代碼中,我們首先使用new Ext.menu.Menu()創建了一個菜單對象,然后再調用菜單對象的add方法來加入菜單項,add方法可以一次性加入多個菜單項,每一個菜單項可以是一個Ext.menu.Item對象,也可以是用于構造Ext.menu.Item的配置對象,這里直接使用的是菜單項描述對象。在菜單項中,我們又使用menu屬性來定義了“文件”、“編輯”兩個菜單項的二級菜單。
  在定義完了菜單并加入菜單項后,我們定義了hello這個DOM元素的click事件響應函數,在響應函數中調用菜單對象menu的show方法來顯示菜單,show方法中包含一個參數,表示讓菜單顯示在哪兒。
執行上面的程序,點擊頁面中“顯示菜單”這個DIV,則會看到如圖11-3所示的菜單顯示效果。
 
圖11-3 手動創建及顯示菜單

 ExtJS中的菜單項
  在ExtJS中,菜單項提供了普通菜單項、文本菜單項、單選、復選等幾種基本的菜單項,我們前面兩個例子中涉及到的都是普通的菜單項。下面我們再通過一個示例來簡單地對文本菜單項、單選及復選菜單項有一個簡單的了解,代碼內容如下:

var menu=new Ext.menu.Menu();
 menu.add(
{
  text:
"字號",
  menu:[
   
new Ext.menu.CheckItem({text:"",group:"font"}),
   
new Ext.menu.CheckItem({text:"",group:"font"}),
   
new Ext.menu.CheckItem({text:"",group:"font"})
   ]
  }
,
  
{
  text:
"字體",
  menu:[
   
new Ext.menu.CheckItem({text:"加粗"}),
   
new Ext.menu.CheckItem({text:"斜體"})
   ]
  }
,
  
"-",
  
new  Ext.menu.TextItem("文本菜單項1"),
  
"文本菜單項2"
  
 );
 
var h=Ext.get("hello");
 h.on(
"click",function(e){
  menu.show(h);
 }

 );

 


   在上面的代碼中,首先使用new Ext.menu.Menu()來創建了一個菜單對象,在使用add方法添加菜單項的時候,“字號”菜單的二級菜單項是CheckItem對象,里面通過設置group屬性使得該菜單項成為單選菜單項,因為“字號”同一時刻只能選擇一種;“字體”菜單的二級菜單項同樣是使用CheckItem來創建,由于沒有指定group屬性,因些該菜單項就是復選菜單項。另外,還使用new  Ext.menu.TextItem來創建文本菜單項,文本菜單項也可以直接使用字符串代表,比如“文本菜單項2”,而文本內容為“-”的文本菜單項表現出來會成來菜單項分隔符。執行上面的程序,點擊頁面中“hello”這個DIV時,將會顯示菜單,效果如圖11-4與圖11-5所示。
 
圖11-4 單選菜單項效果
 
圖11-5 復選菜單項效果

 處理菜單事件
  對于普通的菜單項來說,要設置事件響應函數非常簡單,只需要在菜單項添初始化的時候,在配置選項中添加上handler屬性及值即可。比如下面包含了事件處理器的菜單項:

 

function openFile()
{
 Ext.MessageBox.alert(
"提示","打開文件");
}

var btn1=new Ext.Button({
 text:
"文件",
 menu:[
  
{icon:"open.jpg",text:"打開",handler:openFile},
  
{icon:"save.jpg",text:"保存"},
  
{text:"關閉"}]
}
);


在“文件”菜單項下面的“打開”菜單項中,設置了handler屬性,因此點擊該菜單項則會執行openFile函數。

 其它菜單項
  除了普通菜單項、文本、單選菜單項、復選菜單項以外,ExtJS中的菜單項理論上還可以是其它任何控件,或者說頁面中大部份DOM節點都可以用來做為菜單項上面的內容。ExtJS提供了一個Ext.menu.Adapter類來支持把其它控件轉換成菜單項,并提供了兩個常用的用于選擇日期及顏色的菜單,即Ext.menu.DateMenu與Ext.menu.ColorMenu,這兩個菜單里面都只有一個菜單項,即Ext.menu.DateItem與Ext.menu.ColorItem。下面簡單看示例:

var btn1=new Ext.Button({
 text:
"文件",
 menu:[
  
{icon:"open.jpg",text:"打開"},
  
{icon:"save.jpg",text:"保存"},
  
{text:"關閉"}]}
);
var btn2=new Ext.Button({
 text:
"編輯",
 menu:[
  
{text:"復制"},
  
{text:"拷貝"},
  
"-",
  
{text:"查找"},
  
{text:"替換"}
 ] 
}
);
var btn3=new Ext.Button({
 text:
"其它",
 menu:[
  
{text:"選擇日期",menu:new Ext.menu.DateMenu()},
  
{text:"選擇顏色",menu:new Ext.menu.ColorMenu()}
 ] 
}
);
var toolbar=new Ext.Toolbar({
 renderTo:
"menu",
 items:[btn1,btn2,btn3]
}
);


  在上面的代碼中,btn3這個按鈕下面包含“選擇日期”及“選擇顏色”兩個菜單項,選擇日期下的菜單是一個DateMenu對象,“選擇顏色”下的菜單是ColorMenu對象。執行上面的程序,當點擊其它按鈕的時候,可以得到如圖11-6與11-7所示的日期選擇及顏色選擇菜單。
 
圖11-6 日期DateMenu選擇菜單的顯示效果
 
圖11-7 顏色ColorMenu選擇菜單的顯示效果

(本文摘自《ExtJS實用開發指南》,該指南當前在北京、深圳、成都、重慶、沈陽等城市均已經可以直接到服務點購買,具體聯系方式:http://www.vifir.com/stations.html。)