`
mmdev
  • 浏览: 12928468 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

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
/**//**
*<p>Title:LoonFramework</p>
*<p>Description:Ext的Menu用例</p>
*<p>Copyright:Copyright(c)2008</p>
*<p>Company:LoonFramework</p>
*<p>License:http://www.apache.org/licenses/LICENSE-2.0</p>
*@authorchenpeng
*@email:ceponline@yahoo.com.cn
*@version0.1
*/

Ext.onReady(
function()...{
Ext.QuickTips.init();
//菜单选项
vardateMenu=newExt.menu.DateMenu(...{
handler:
function(dp,date)...{
Ext.MessageBox.alert(
'日期选择','选择日期为:'+date.format('Y/m/d'),'');
}

}
);

varcolorMenu=newExt.menu.ColorMenu(...{
id:
'colorMenu',
handler:
function(cm,color)...{
varrgb=Ext.color.hexToRGB(color);
Ext.MessageBox.alert(
'颜色','R='+rgb.R+',G='+rgb.G+',B='+rgb.B,'');
}

}
);

functiononItemCheck(item,checked)...{
Ext.MessageBox.alert(
'选择','当前点选['+item.text+'],状态为'+(checked?'checked':'unchecked'),'');
}


varmenu=newExt.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
}
]
}
);
//创建工具栏
vartb=newExt.Toolbar();
//绑定到toolbar元素
tb.render('toolbar');
//添加菜单
tb.add(...{
text:
'Ext菜单测试',
iconCls:
'bmenu',
//注入菜单
menu:menu
}
);




}
);
//自定义函数,用于从colorevent中提取所选数值
Ext.color=function()...{
varresult='';
varbool=true;
varformatValue=function(obj)...{
if(bool)...{
varobj=Array.prototype.slice.call(arguments,0);
result
=String.format('{0}',obj);
}

bool
=!bool;
returnresult;
}

varhexTodec=function(hexchar)...{
return"0123456789ABCDEF".indexOf(hexchar.toUpperCase());
}

return...{
value:
function(obj)...{
returnformatValue(obj);
}
,
hexToRGB:
function(color)...{
color
=formatValue(color);
varnow=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>
<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
<title>MenuExt</title>
<!--加载ExtJs资源-->
<linkrel="stylesheet"type="text/css"href="resources/css/ext-all.css"/>
<scripttype="text/javascript"src="adapter/ext/ext-base.js">...
</script>
<scripttype="text/javascript"src="ext-all.js">...
</script>
<!--我的js-->
<scripttype="text/javascript"src="MenuExt.js">...
</script>
</head>
<body>
<divid="toolbar"></div>
</body>
</body>
</html>


运行效果图如下:
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics