ExtJS2.0開發與實踐筆記[3]——Ext中的Menu
在桌面程式gui開發中,menu是我們所經常使用的元件之一,它為使用者提供了便利的程式功能選擇項;而在web開發中,如何製作menu選單效果一直是 個很棘手的問題,如何讓選單通用,如何令選單響應事件都需要我們自己動手來完成。所幸Ext也為我們提供了Menu元件,以Ext進行開發時,我們的不必 要工作量將大大的減少。
Ext 的Menu元件,是通過幾個類的聯合來使用的,這些類包括:Ext.Toolbar、Ext.menu.Menu、Ext.menu.Item、 Ext.menu.CheckItem,以及一些特殊型別的選單或選單項,例如選單Ext.menu.DateMenu、選單項 Ext.menu.ColorItem。
其中組織關係如下圖:
Ext.Toolbar:
該類表示一個選單條,構建函式接受兩個引數,第一個是指定toolbar的容器(contrainer);第二個引數是包含全部按鈕的陣列。
Ext.menu.Menu:
該類表示一個選單,包含選單標識id和選單中所含的選單項。
Ext.menu.Item:
該類表示一個選單項,選單項包括一些屬性,如上面的text和handler,根據不同選單項型別,屬性的使用略有不同,最基本的包括文字內容text和事件處理器函式handler/ checkHandler,具體請參考Ext 的API文件。
Ext.menu.CheckItem:
可選選單項,從Ext.menu.Item繼承而來,表示可選的選單項。
Ext.menu.DateMenu:
特定的表示時間的選單,從Ext.menu.Menu繼承而來 。
Ext.menu.ColorItem:
特定的表示顏色選擇的選單項集合,可直接作為Menu建構函式中的items屬性值。
下面我給出一個簡單的用例程式碼:(Ext2.0配置方法見此)
MenuExt.js
MenuExt.html
執行效果圖如下:
Ext 的Menu元件,是通過幾個類的聯合來使用的,這些類包括:Ext.Toolbar、Ext.menu.Menu、Ext.menu.Item、 Ext.menu.CheckItem,以及一些特殊型別的選單或選單項,例如選單Ext.menu.DateMenu、選單項 Ext.menu.ColorItem。
其中組織關係如下圖:
Ext.Toolbar:
該類表示一個選單條,構建函式接受兩個引數,第一個是指定toolbar的容器(contrainer);第二個引數是包含全部按鈕的陣列。
Ext.menu.Menu:
該類表示一個選單,包含選單標識id和選單中所含的選單項。
Ext.menu.Item:
該類表示一個選單項,選單項包括一些屬性,如上面的text和handler,根據不同選單項型別,屬性的使用略有不同,最基本的包括文字內容text和事件處理器函式handler/ checkHandler,具體請參考Ext 的API文件。
Ext.menu.CheckItem:
可選選單項,從Ext.menu.Item繼承而來,表示可選的選單項。
Ext.menu.DateMenu:
特定的表示時間的選單,從Ext.menu.Menu繼承而來 。
Ext.menu.ColorItem:
特定的表示顏色選擇的選單項集合,可直接作為Menu建構函式中的items屬性值。
下面我給出一個簡單的用例程式碼:(Ext2.0配置方法見此)
MenuExt.js
/**
* <p>Title: LoonFramework</p>
* <p>Description:Ext的Menu用例</p>
* <p>Copyright: Copyright (c) 2008</p>
* <p>Company: LoonFramework</p>
* <p>License: [url]http://www.apache.org/licenses/LICENSE-2.0</p>[/url]
* @author chenpeng
* @email:[email]ceponline@yahoo.com.cn[/email]
* @version 0.1
*/
Ext.onReady(function(){
Ext.QuickTips.init();
//選單選項
var dateMenu = new Ext.menu.DateMenu({
handler: function(dp, date){
Ext.MessageBox.alert('日期選擇', '選擇日期為: ' + date.format('Y/m/d'), '');
}
});
var colorMenu = new Ext.menu.ColorMenu({
id: 'colorMenu',
handler: function(cm, color){
var rgb=Ext.color.hexToRGB(color);
Ext.MessageBox.alert('顏色','R='+rgb.R+',G='+rgb.G+',B='+rgb.B, '');
}
});
function onItemCheck(item, checked){
Ext.MessageBox.alert('選擇', '當前點選[' + item.text + '],狀態為 ' + (checked ? 'checked' : 'unchecked'), '');
}
var menu = new Ext.menu.Menu({
id: 'mainMenu',
items: [{
text: '選項1',
//預設為選中
checked: true,
//選中處理方式為onItemCheck
checkHandler: onItemCheck
}, {
text: '選項2',
checked: true,
checkHandler: onItemCheck
}, {
text: '選項3!',
checked: true,
checkHandler: onItemCheck
}, //分隔選單
'-', {
text: '單選選單',
menu: {
items: [{
text: 'A',
checked: false,
group: 'theme',
checkHandler: onItemCheck
}, {
text: 'B',
checked: true,
group: 'theme',
checkHandler: onItemCheck
}, {
text: 'C',
checked: false,
group: 'theme',
checkHandler: onItemCheck
}, {
text: 'D',
checked: false,
group: 'theme',
checkHandler: onItemCheck
}]
}
}, {
text: '日期選擇',
iconCls: 'calendar',
menu: dateMenu
}, {
text: '顏色選擇',
menu: colorMenu
}]
});
//建立工具欄
var tb = new Ext.Toolbar();
//繫結到toolbar元素
tb.render('toolbar');
//新增選單
tb.add({
text: 'Ext選單測試',
iconCls: 'bmenu',
//注入選單
menu: menu
});
});
// 自定義函式,用於從color event中提取所選數值
Ext.color = function(){
var result = '';
var bool = true;
var formatValue = function(obj){
if (bool) {
var obj = Array.prototype.slice.call(arguments, 0);
result = String.format('{0}', obj);
}
bool = !bool;
return result;
}
var hexTodec = function(hexchar){
return "0123456789ABCDEF".indexOf(hexchar.toUpperCase());
}
return {
value: function(obj){
return formatValue(obj);
},
hexToRGB: function(color){
color = formatValue(color);
var now = color.replace("#", "");
return {
R: (hexTodec(now.substr(0, 1)) * 16) + hexTodec(now.substr(1, 1)),
G: (hexTodec(now.substr(2, 1)) * 16) + hexTodec(now.substr(3, 1)),
B: (hexTodec(now.substr(4, 1)) * 16) + hexTodec(now.substr(5, 1))
}
},
init: function(){
}
};
}
();
Ext.onReady(Ext.color.init, Ext.color);
* <p>Title: LoonFramework</p>
* <p>Description:Ext的Menu用例</p>
* <p>Copyright: Copyright (c) 2008</p>
* <p>Company: LoonFramework</p>
* <p>License: [url]http://www.apache.org/licenses/LICENSE-2.0</p>[/url]
* @author chenpeng
* @email:[email]ceponline@yahoo.com.cn[/email]
* @version 0.1
*/
Ext.onReady(function(){
Ext.QuickTips.init();
//選單選項
var dateMenu = new Ext.menu.DateMenu({
handler: function(dp, date){
Ext.MessageBox.alert('日期選擇', '選擇日期為: ' + date.format('Y/m/d'), '');
}
});
var colorMenu = new Ext.menu.ColorMenu({
id: 'colorMenu',
handler: function(cm, color){
var rgb=Ext.color.hexToRGB(color);
Ext.MessageBox.alert('顏色','R='+rgb.R+',G='+rgb.G+',B='+rgb.B, '');
}
});
function onItemCheck(item, checked){
Ext.MessageBox.alert('選擇', '當前點選[' + item.text + '],狀態為 ' + (checked ? 'checked' : 'unchecked'), '');
}
var menu = new Ext.menu.Menu({
id: 'mainMenu',
items: [{
text: '選項1',
//預設為選中
checked: true,
//選中處理方式為onItemCheck
checkHandler: onItemCheck
}, {
text: '選項2',
checked: true,
checkHandler: onItemCheck
}, {
text: '選項3!',
checked: true,
checkHandler: onItemCheck
}, //分隔選單
'-', {
text: '單選選單',
menu: {
items: [{
text: 'A',
checked: false,
group: 'theme',
checkHandler: onItemCheck
}, {
text: 'B',
checked: true,
group: 'theme',
checkHandler: onItemCheck
}, {
text: 'C',
checked: false,
group: 'theme',
checkHandler: onItemCheck
}, {
text: 'D',
checked: false,
group: 'theme',
checkHandler: onItemCheck
}]
}
}, {
text: '日期選擇',
iconCls: 'calendar',
menu: dateMenu
}, {
text: '顏色選擇',
menu: colorMenu
}]
});
//建立工具欄
var tb = new Ext.Toolbar();
//繫結到toolbar元素
tb.render('toolbar');
//新增選單
tb.add({
text: 'Ext選單測試',
iconCls: 'bmenu',
//注入選單
menu: menu
});
});
// 自定義函式,用於從color event中提取所選數值
Ext.color = function(){
var result = '';
var bool = true;
var formatValue = function(obj){
if (bool) {
var obj = Array.prototype.slice.call(arguments, 0);
result = String.format('{0}', obj);
}
bool = !bool;
return result;
}
var hexTodec = function(hexchar){
return "0123456789ABCDEF".indexOf(hexchar.toUpperCase());
}
return {
value: function(obj){
return formatValue(obj);
},
hexToRGB: function(color){
color = formatValue(color);
var now = color.replace("#", "");
return {
R: (hexTodec(now.substr(0, 1)) * 16) + hexTodec(now.substr(1, 1)),
G: (hexTodec(now.substr(2, 1)) * 16) + hexTodec(now.substr(3, 1)),
B: (hexTodec(now.substr(4, 1)) * 16) + hexTodec(now.substr(5, 1))
}
},
init: function(){
}
};
}
();
Ext.onReady(Ext.color.init, Ext.color);
MenuExt.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>MenuExt</title>
<!--載入ExtJs資源-->
<link rel="stylesheet" type="text/css" href="resources/css/ext-all.css"/>
<script type="text/javascript" src="adapter/ext/ext-base.js">
</script>
<script type="text/javascript" src="ext-all.js">
</script>
<!--我的js-->
<script type="text/javascript" src="MenuExt.js">
</script>
</head>
<body>
<div id="toolbar"></div>
</body>
</body>
</html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>MenuExt</title>
<!--載入ExtJs資源-->
<link rel="stylesheet" type="text/css" href="resources/css/ext-all.css"/>
<script type="text/javascript" src="adapter/ext/ext-base.js">
</script>
<script type="text/javascript" src="ext-all.js">
</script>
<!--我的js-->
<script type="text/javascript" src="MenuExt.js">
</script>
</head>
<body>
<div id="toolbar"></div>
</body>
</body>
</html>
執行效果圖如下:
本文轉自 cping 51CTO部落格,原文連結:http://blog.51cto.com/cping1982/130273
相關文章
- ExtJS2.0開發與實踐筆記[1]——ExtJS中的Dialog與FormJS筆記ORM
- ExtJS2.0開發與實踐筆記[0]——初識ExtJSJS筆記
- JavaScript設計模式與開發實踐筆記JavaScript設計模式筆記
- 《敏捷軟體開發 原則、模式與實踐》的讀書筆記敏捷模式筆記
- Chrome Extension 開發中的 Tab 操作與實踐Chrome
- Ext學習筆記3-事件及元件筆記事件元件
- 《Python開發簡單爬蟲》實踐筆記Python爬蟲筆記
- JS單例模式《JavaScript設計模式與開發實踐》閱讀筆記JS單例JavaScript設計模式筆記
- 《JavaScript設計模式與開發實踐》讀書筆記之基礎部分JavaScript設計模式筆記
- Python爬蟲開發與專案實踐(3)Python爬蟲
- iOS開發備忘筆記 (3)iOS筆記
- canvas在前端開發中的實踐Canvas前端
- 實踐中悟出的最佳JavaScript開發JavaScript
- 【筆記】《app後臺開發運維和架構實踐》筆記APP運維架構
- 《Kafka入門與實踐》讀書筆記Kafka筆記
- docker 筆記3 dockerfile語法及最佳實踐Docker筆記
- [筆記]最佳實踐筆記
- bootstrap實踐筆記boot筆記
- 《JavaScript設計模式與開發實踐》模式篇(3)—— 代理模式JavaScript設計模式
- 設計模式之單例模式(《JavaScript設計模式與開發實踐》讀書筆記)設計模式單例JavaScript筆記
- 文件驅動開發模式在 AIMS 中的應用與實踐模式AI
- 新手筆記-持續改進實踐:開發計劃的改進 (轉)筆記
- 最佳實踐(3):Windows應用開發Windows
- puppeteer在開發過程中的實踐
- 《管理:任務、責任、實踐》讀書筆記(3)筆記
- iOS BLE 開發小記[5] 與 Remote Peripheral 互動的最佳實踐iOSREM
- Android學習筆記(建立Menu,Intent的使用)Android筆記Intent
- jquery最佳實踐筆記jQuery筆記
- 《深入實踐Spring Boot》閱讀筆記:分散式應用開發Spring Boot筆記分散式
- Vue3 + TypeScript 開發實踐總結VueTypeScript
- 開發中的程式碼規範實踐 PHPPHP
- Android開發中API層的最佳實踐AndroidAPI
- 微信小程式開發學習筆記[3]微信小程式筆記
- R/3 ABAP開發學習筆記(轉)筆記
- 《Redis開發與運維》快速筆記Redis運維筆記
- .net開發筆記(十八) winform中的等待框筆記ORM
- Ext2.x學習筆記筆記
- Ext學習筆記6-Ajax筆記