Extjs学习笔记之四 工具栏和菜单


Posted in Javascript onJanuary 07, 2010

ToolBar的使用很简单,关键是向ToolBar上面添加内容,默认地ToolBar添加的是Button,不过实际上可以向Toolbar添加任意的组件。下面是一个例子:

<script type="text/javascript"> 
Ext.onReady(function() { 
var tb = new Ext.Toolbar({ 
renderTo: document.body, 
width: 600, 
height: 100, 
items: [ 
{ 
// xtype: 'button', // default for Toolbars, same as 'tbbutton' 
text: 'Button' 
}, 
{ 
xtype: 'splitbutton', // same as 'tbsplitbutton' 
text: 'Split Button' 
}, 
// begin using the right-justified button container 
'->', // same as {xtype: 'tbfill'}, // Ext.Toolbar.Fill 
{ 
xtype: 'textfield', 
name: 'field1', 
emptyText: 'enter search term' 
}, 
// add a vertical separator bar between toolbar items 
'-', // same as {xtype: 'tbseparator'} to create Ext.Toolbar.Separator 
'text 1', // same as {xtype: 'tbtext', text: 'text1'} to create Ext.Toolbar.TextItem 
{xtype: 'tbspacer' }, // same as ' ' to create Ext.Toolbar.Spacer 
'text 2', 
{ xtype: 'tbspacer', width: 50 }, // add a 50px space 
'text 3' 
] 
}); }); 
</script>

Extjs添加组件的方式很灵活,可以在items数组中直接添加对象,比如new Ext.Button(…),也可以直接添加配置项,如上例所示,其实就是把对象的构造函数中的参数直接取出来,省略了new,取而代之的是xtype,由extjs根据xtype去构造相应的对象。xtype是在Ext.Component中定义的,xtype是一个字符串,它的作用是一个类型的别名。Extjs有一些默认的xtype,用户自己也可以设置某个类型的xtype,不过这个超出了本文的范围。xtype和类型的对应在extjs的api文档中有,下面摘抄出一部分备查。

Toolbar components
---------------------------------------
paging Ext.PagingToolbar
toolbar Ext.Toolbar
tbbutton Ext.Toolbar.Button (deprecated; use button)
tbfill Ext.Toolbar.Fill
tbitem Ext.Toolbar.Item
tbseparator Ext.Toolbar.Separator
tbspacer Ext.Toolbar.Spacer
tbsplit Ext.Toolbar.SplitButton (deprecated; use splitbutton)
tbtext Ext.Toolbar.TextItem

Menu components
---------------------------------------
menu Ext.menu.Menu
colormenu Ext.menu.ColorMenu
datemenu Ext.menu.DateMenu
menubaseitem Ext.menu.BaseItem
menucheckitem Ext.menu.CheckItem
menuitem Ext.menu.Item
menuseparator Ext.menu.Separator
menutextitem Ext.menu.TextItem

Form components
---------------------------------------
form Ext.form.FormPanel
checkbox Ext.form.Checkbox
checkboxgroup Ext.form.CheckboxGroup
combo Ext.form.ComboBox
datefield Ext.form.DateField
displayfield Ext.form.DisplayField
field Ext.form.Field
fieldset Ext.form.FieldSet
hidden Ext.form.Hidden
htmleditor Ext.form.HtmlEditor
label Ext.form.Label
numberfield Ext.form.NumberField
radio Ext.form.Radio
radiogroup Ext.form.RadioGroup
textarea Ext.form.TextArea
textfield Ext.form.TextField
timefield Ext.form.TimeField
trigger Ext.form.TriggerField

再仔细看下xtype的api文档的原文:
xtype : String

The registered xtype to create. This config option is not used when passing a config object into a constructor. This config option is used only when lazy instantiation is being used, and a child item of a Container is being specified not as a fully instantiated Component, but as a Component config object. Thextype will be looked up at render time up to determine what type of child Component to create.

这句话说的是如果在new的时候使用xtype,这个xtype是忽略的,这个是明显的,用了new就肯定要指定一个类型,xtype是无用的。后面半句才是关键,它的意思是如果使用xtype,对象并不是立刻构造出来的,而是采用一种延迟加载的机制,等到需要显示这个对象的时候再去构造它,在第一次使用之前在内存中仅是一个组件配置对象(component config object),虽然API文档没有明说,但是却暗示出来如果可能,使用xtype而不是new是一个更好的选择,它可以节省内存。实际中,不是所有的组件都需要被显示,那么那些没有被显示的组件就不需要被实例化。
此文中谈到了这点 EXT中xtype的含义 .
介绍了下xtype,下面回到工具栏上来,上面的代码的运行效果是:
Extjs学习笔记之四 工具栏和菜单 
一个很美观的工具栏就出现了。接下来的工作是为这些按钮添加方法,不过这不是本文的讨论范围,以后再讲。

接下来介绍Menu,Menu和Toolbar是很类似的。Menu上能添加的组件在上面的xtype表中已经列出,直接看一个例子:

<script type="text/javascript"> 
Ext.onReady(function() { 
var tb = new Ext.Toolbar({ 
renderTo: document.body, 
width: 600, 
height: 100 
}); 
var filemenu = new Ext.menu.Menu({ 
shadow: 'frame', 
items: [{ text: 'New' }, { text: 'Open' }, { text: 'Save' }, 
"-", { text: 'Export' },{ text: 'Import' } 
] 
}); 
tb.add({ text: 'File', menu: filemenu }); 
var dateMenu = new Ext.menu.DateMenu({}); 
var colorMenu = new Ext.menu.ColorMenu({}); tb.add({ text: 'Colorful', menu: { xtype: 'menu', items: [ 
{text: 'Choose a date', menu: dateMenu }, 
{ text: 'Choose a color', menu: colorMenu }, "-", 
{ 
text: 'Radio Options', 
menu: { // <-- submenu by nested config object 
items: [ 
// stick any markup in a menu 
'<b class="menu-title">Choose a Theme</b>', 
{ 
text: 'Aero Glass', 
checked: true, 
group: 'theme' 
}, { 
text: 'Vista Black', 
checked: false, 
group: 'theme' 
}, { 
text: 'Gray Theme', 
checked: false, 
group: 'theme' 
}, { 
text: 'Default Theme', 
checked: false, 
group: 'theme' 
} 
] 
} 
} 
]} 
}); 
tb.doLayout(); 
}); 
</script>

效果如下:
Extjs学习笔记之四 工具栏和菜单
Javascript 相关文章推荐
利用ASP发送和接收XML数据的处理方法与代码
Nov 13 Javascript
选择器中含有空格在使用示例及注意事项
Jul 31 Javascript
eclipse导入jquery包后报错的解决方法
Feb 17 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
Mar 11 Javascript
Vue方法与事件处理器详解
Dec 01 Javascript
原生JS实现导航下拉菜单效果
Nov 25 Javascript
jquery中封装函数传递当前元素的方法示例
May 05 jQuery
使用Angular CLI进行单元测试和E2E测试的方法
Mar 24 Javascript
原生JS实现轮播图效果
Oct 12 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
Jul 29 Javascript
微信小程序与公众号实现数据互通的方法
Jul 25 Javascript
JavaScript获取时区实现过程解析
Sep 24 Javascript
Extjs学习笔记之三 extjs form更多的表单项
Jan 07 #Javascript
Extjs学习笔记之二 初识Extjs之Form
Jan 07 #Javascript
Extjs学习笔记之一 初识Extjs之MessageBox
Jan 07 #Javascript
jQuery DOM操作小结与实例
Jan 07 #Javascript
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
Jan 05 #Javascript
jQuery 数据缓存data(name, value)详解及实现
Jan 04 #Javascript
用AJAX返回HTML片段中的JavaScript脚本
Jan 04 #Javascript
You might like
深入extjs与php参数交互的详解
2013/06/25 PHP
PHP跨平台获取服务器IP地址自定义函数分享
2014/12/29 PHP
php利用反射实现插件机制的方法
2015/03/14 PHP
PHP统计当前在线用户数实例讲解
2015/10/21 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
Laravel相关的一些故障解决
2020/08/19 PHP
解决 firefox 不支持 document.all的方法
2007/03/12 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
Extjs表单常见验证小结
2014/03/07 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
从零学习node.js之mysql数据库的操作(五)
2017/02/24 Javascript
vue基于Element构建自定义树的示例代码
2017/09/19 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
Vuex的初探与实战小结
2018/11/26 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
解决vue cli使用typescript后打包巨慢的问题
2019/09/30 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
[01:51]历届DOTA2国际邀请赛举办地回顾 TI9落地上海
2018/08/26 DOTA
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
python 简单照相机调用系统摄像头实现方法 pygame
2018/08/03 Python
python for循环remove同一个list过程解析
2019/08/14 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
2020/06/24 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
毕业生实习鉴定
2013/12/11 职场文书
群众路线教师自我剖析材料
2014/09/29 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
走群众路线学习笔记
2014/11/06 职场文书
党风廉政建设调研报告
2015/01/01 职场文书
施工员岗位职责范本
2015/04/11 职场文书
七一活动主持词
2015/06/29 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书