`
sony-soft
  • 浏览: 1105297 次
文章分类
社区版块
存档分类
最新评论

学习EXT第三天:Menu组件

 
阅读更多

这篇教程中,我们将学习使用Ext的菜单器件(Menu Widgets)。假设读者已经阅读过Ext简介一文,并懂得一些Ext的基本相关知识。菜单器件是Ext库中较迟实现的器件。它由几个类联合构成,使得创建一个菜单只需若干代码块(Block of code)。

开始!

第一步要做的是,下载本教程的示例文件。Zip文件包括三个文件:ExtMenu.html,、ExtMenu.jsExtMenu.css、list-items.gif。解包这四个文件到Ext的安装目录中(例如,Ext是在“C:/code/Ext/v1.0”中,那应该在"v1.0"里面新建目录“menututorial”。双击ExtMenu.htm,接着你的浏览器打开启动页面,应该会有一条消息告诉你配置已完毕。如果是一个Javascript错误,请按照页面上的指引操作。

在你常用的IDE中或文本编辑器中,打开ExtMenu.js看看:

Ext.onReady(function(){
alert(
"YouhaveExtconfiguredcorrectly!WearenowreadytodosomeExtMenuMagic!");
});

在Ext的介绍中,我们讨论过使用Ext的原因和Ext.onReady()函数的功能。


创建简易的菜单

先看看怎么做一个基本的菜单,然后再讨论代码中的各个组件和知识点。加入下列代码到onReady函数中:

varmenu=newExt.menu.Menu(...{
id:
'basicMenu',
items:[
...{
text:
'Anitem',
handler:clickHandler
}
,
newExt.menu.Item(...{
text:
'Anotheritem',
handler:clickHandler
}
),
'-',
newExt.menu.CheckItem(...{
text:
'Acheckitem',
checkHandler:checkHandler
}
),
newExt.menu.CheckItem(...{
text:
'Anothercheckitem',
checkHandler:checkHandler
}
)
]
}
);

vartb=newExt.Toolbar();
tb.render(
'toolbar');

tb.add(
...{
text:
'Buttonw/Menu',
menu:menu
//assignmenubyinstance
}
);

functionclickHandler()...{
alert(
'Clickedonamenuitem');
}


functioncheckHandler()...{
alert(
'Checkedamenuitem');
}

OK 仔细看看这里的代码,首先实例化一个Menu类为变量“menu”。然后Menu的构建函数接受一串的Object Literal作为参数,在先前的Ext教程中我们已经讨对ObjectLiteral进行了解。当前的ObjectLiteral就包含了我们菜单中想要的属性。第一个属性是我们分配的ID,稍后我们可用ID来获取Menu的引用。


各种Item的类型

属性“items”可能是最重要的属性当中的一个。留意一下语法其实我们是将一个数组作为值(value)传到属性中去。数组里的数据就是我们想要在菜单中出现的每一项。每本例中我们放了六个菜单项,但何解每项的语法(Syntax)都不尽相同呢?第一项是一串Object Literal,包含一组我们可配置的name/value。Ext的底层库会为这串Object Literal按其配置默认地创建item对象。接着第二项是Item对象本身,后面跟着分隔符,最后两个是单选框项。整个过程演示了Ext Widget如何动态的运行。下例各项可填入到数组中:

{text: 'Foo'} // Ext 转换这个配置对象到menu item
'Straight Text' //文本或原始html (纯文字)
'-' // 创建分隔符
new Ext.menu.Item({text: 'Foo'}) // 创建一个标准item (同{text: 'Foo'})
new Ext.menu.CheckItem() // 创建单选框item
new Ext.menu.DateItem() // 创建menu内置的日历控件
new Ext.menu.ColorItem() //创建一个颜色采集器
new Ext.menu.BaseItem(document.getElementById('my-div')) //允许你加入任何元素

Item属性

Item接受什么类型的属性呢?本例中我们使用了这两属性:

text:'Anitem',
handler:clickHandler

第一个是Item的文本。第二个是当用户单击一单击Item所触发的事件处理函数(event handler function)。本例中我们将函数clickHandler()和checkHandler()定义在代码的最后。作为演示用途,这仅仅是用alert()通知你有一个单击的消息。
其它有用的属性是:

cls:'a-class-name',//为标准Item手动设置样式和图标ICON
icon:'url',//如不想用CSS,可直接设置图标的URL
group:'nameofgroup',//只适用多选项,保证只有一项被选中

完整的item属性列表在Menu Item文档中。

在UI中摆放菜单

So,创建好的Menu对象已经有两个基本的item了,然而我们怎么把它们摆放到页面中呢?在UI中一个menu可以分配到多个位置(同一个对象,不同位置多次使用),这正是Ext如此强大的原因:每一个器件(widget)切成“一块一快”的类,来构建整个面向对象的动态结构(Structure)。这意味着menu可用于不同的场合。我们可将menu放到有按钮的toolbar中,或用页面中的一个按钮来展开menu,甚至可在Ext的其它器件中(widgets)使用menu作为上下文菜单(Context Menu)。

本例中分配一个menu到toolbar中:

vartb=newExt.Toolbar('toolbar',[{
text:
'OurfirstMenu',
menu:menu
//分配menu到toolbar
}
]);

Ext.Toolbar构建函数接受两个参数,第一个是指定toolbar的容器(contrainer);第二个参数是包含全部按钮的数组。这里,我们只使用一个按钮,正如所见,按钮实质上是一串由数组组成的Object Literal,同时这个Object Litetal亦包含了不同的属性。下面是一组按钮对象的Object Litetal属性:

cls:'a-class-name',//手动设置样式和图标ICON
icon:'url',//如不想用CSS,可直接设置图标的URL
text:'OurfirstMenu',//按钮提示之文字
menu:menu//可以是menu之id或配置对象

Menu的分配方式:

刚才谈到如何分配Menu到工具条中(toolbar),继而亦讨论menu分配的不同方式,看看有关的细节是怎样的。So,因为menu属性可以以不同方式地分配,即是可以赋予一个menu对象,或是已经建好的menuID,或直接是一个menu config对象。你应该有机会就尝试一下以多种方式创建menu,因为类似的方式方法在Ext的Widgets随处可见。下面的代码演示了如何用不同的方法来做出跟范例一样的效果,唯一相同的就是menu对象的config。菜单中包括两个子菜单、一个DataItem容器、一个ColorItem容器。另外注意event handing函数需两个参数来获取事件更多的信息和知道哪个item被单击了。可以的话,把下面的代码也加入到onReady函数中,亲身体验一下:

vardateMenu=newExt.menu.DateMenu(...{
handler:
function(datepicker,date)...{
alert(
'DateSelected','Youchose:'+date.format('Mj,Y'));
}

}
);

varcolorMenu=newExt.menu.Menu(...{
id:
'colorMenu',//themenu'sidweuselatertoassignassubmenu
items:[
newExt.menu.ColorItem(...{
selectHandler:
function(colorpicker,color)...{
alert(
'ColorSelected','Youchose:'+color);
}

}
)
]
}
);

vartb=newExt.Toolbar('toolbar',[...{
text:
'OurfirstMenu',
menu:
...{
id:
'basicMenu',
items:[
...{
text:
'Anitem',
handler:clickHandler
}
,...{
text:
'Anotheritem',
handler:clickHandler
}
,
'-',
newExt.menu.CheckItem(...{
text:
'Acheckitem',
checkHandler:checkHandler
}
),
newExt.menu.CheckItem(...{
text:
'Anothercheckitem',
checkHandler:checkHandler
}
),
'-',...{
text:
'DateMenuassubmenu',
menu:dateMenu,
//assignthedateMenuwecreatedabovebyvariablereference,
handler:date
}
,...{
text:
'SubmenuwithColorItem',
menu:
'colorMenu'//weassignthesubmenucontainingaColorItemusingit'sid
}

]
}

}

]);

functionclickHandler(item,e)...{
alert(
'Clickedonthemenuitem:'+item.text);
}


functioncheckHandler(item,e)...{
alert(
'Checkedtheitem:'+item.text);
}

注意:留意几种不同的方法加入子菜单!还有even handing函数和Coloritem、DataMenu匿名函数之间的区别。


练一练

Ok我们用上述的方法,创建了toolbar和menu,看起来应该是这样的:

上文提及menu可摆放在UI的任何位置,这里将为你演示menu如何与Toolbars、MeneuButtons、Context Menus's配合工作,包括一些有用的方法和动态添加的功能。

MenuButton
newExt.MenuButton('menubutton',{text:'MenuButton1',menu:dateMenu});

动态添加菜单按钮到Toolbar

这条Toolbar有两个按钮。一个分隔符,和一个纯图标的按钮(附Quicktips)。你可尝试这样做,把zip文件中.gif加入

Ext.QuickTips.init();

tb.add(
'-',{
icon:
'list-items.gif',//图标可单行显示
cls:'x-btn-icon',//纯图标
tooltip:'QuickTips提示文字'
});

更方便的是

一些代码片段,有助你提高效率,留意注释!

//Menus更多的API内容
//
动态增、减元素

menu.addSeparator();
//动态加入分隔符

varitem=menu.add({
text:
'DynamicallyaddedItem'
});

//items完整支持ObservableAPI
item.on('click',onItemClick);

//itemscaneasilybelookedup
menu.add({
text:
'DisabledItem',
id:
'disableMe'//<--设置ID便于查找lookup
//disabled:true<--先不disabled而采用下面的方式
});

//用id或index访问
menu.items.get('disableMe').disable();


分享到:
评论

相关推荐

    ext学习文档

    - **创建简易菜单**: 展示了如何使用EXT的Menu组件创建菜单。 - **各种Item的类型**: 列举了Menu组件支持的不同类型的项。 - **Item属性**: 介绍了Menu项的属性和配置选项。 - **在UI中摆放菜单**: 说明了如何将Menu...

    ext 自动生成器自动生成组件

    4. 插件扩展:可能支持第三方插件,以实现更多特定功能。 5. 版本兼容:确保生成的代码与EXT的不同版本兼容。 6. 整合IDE:与常见的集成开发环境(IDE)集成,提供快捷的代码生成功能。 使用EXT 自动生成器,开发者...

    Ext 学习中文手册

    EXT Menu组件 55 创建简易菜单 56 各种Item的类型 57 Item属性 57 在UI中摆放菜单 58 Menu的分配方式: 58 练一练 60 动态添加菜单按钮到Toolbar 61 更方便的是 61 下一步是 62 模板(Templates)起步 62 第一步 您...

    ext学习例子

    EXT3是EXT的第三个主要版本,发布于2009年,具有稳定性和兼容性的优点。 在"EXT学习例子"这个压缩包中,你将找到一系列EXT3的示例代码,这对于初学者和有一定经验的开发者来说都是极好的学习资源。EXT3的组件模型...

    ext中文文档(第一部分)

    8. **工具栏和菜单**:EXT的Toolbar和Menu组件用于创建各种操作栏和下拉菜单,增强用户交互体验。 9. **拖放功能**:EXT支持拖放操作,可以用于创建可拖动和可放置的组件。 10. **国际化支持**:EXT提供了国际化功能...

    ext框架仿win 7的效果

    EXT框架的Toolbar和Menu组件可以模拟Win 7的下拉菜单和任务栏,通过自定义图标和文字,以及设置相应的事件处理,实现类似的功能。 3. **图标(Icon)和图标的样式**:EXT框架允许开发者使用自定义图标,我们可以...

    EXT 中文手册

    - **创建菜单**:使用Menu组件可以快速创建上下文菜单、工具栏菜单等。 - **Item类型**:Menu支持多种Item类型,如普通菜单项、分割线等。 - **属性配置**:可以通过设置Item的属性来自定义其外观和行为。 #### 十...

    Ext Js权威指南(.zip.001

    第3章 调试工具及技巧 / 62 3.1 使用firebug进行调试 / 62 3.2 在ie中调试 / 76 3.2.1 使用debugbar和companion.js调试 / 76 3.2.2 使用ietester测试 / 80 3.2.3 在ie 8或ie 9中调试 / 83 3.3 在chrome中调试...

    EXT2.1中文API

    1. **组件库**:EXT的核心在于其丰富的组件库,如表格(Grid)、面板(Panel)、窗口(Window)、菜单(Menu)等。这些组件都是可重用的,且具有高度可配置性,可以快速搭建出复杂的UI结构。 2. **数据绑定**:EXT...

    EXT简体中文参考手册(PDF&CHM电子档)

    EXT Menu组件 55 创建简易菜单 56 各种Item的类型 57 Item属性 57 在UI中摆放菜单 58 Menu的分配方式: 58 练一练 60 动态添加菜单按钮到Toolbar 61 更方便的是 61 下一步是 62 模板(Templates)起步 62 第一步 您...

    深入浅出Ext JS(第2版)随书光盘源码

    2. **组件系统**:Ext JS 的组件模型是其强大之处,包括窗口(Window)、面板(Panel)、表格(Grid)、表单(Form)、菜单(Menu)等。代码中会有大量组件实例,展示了如何创建、配置和组合这些组件。 3. **数据...

    EXT 中文帮助手册

    定义数据(Data Definition) 51 步骤二 列模型(Column Model) 52 Grid组件的简易分页 53 Grid数据 53 怎么做一个分页的Grid 54 分页栏Toolbar 55 EXT Menu组件 55 创建简易菜单 56 各种...

    Ext中文手册+2.0实例

    2. **组件基础**:讲解各种基础组件的使用,如按钮(Button)、窗口(Window)、菜单(Menu)等。 3. **表格和表单**:深入探讨表格控件(GridPanel)的配置和操作,以及表单组件(FormPanel)的创建和数据验证。 4....

    精通JS脚本之ExtJS框架.part1.rar

    第3章 开始使用ExtJS 3.1 ExtJS概述 3.1.1 ExtJS简介 3.1.2 ExtJS中的基本概念 3.1.3 ExtJS与常见JavaScript库的介绍与对比 3.2 创建第一个程序 3.2.1 下载ExtJS 3.2.2 部署到开发工具中 3.2.3 编写Hello...

    ExtJs4_笔记.docx

    **第三章 Ext.Ajax 对ajax的支持** 1. **Ext.Ajax.request**:提供了完整的AJAX请求方法,支持GET、POST等多种HTTP方法,同时可以设置请求头、处理响应等。 2. **Ext.Updater**(已弃用):过去用于元素内容的Ajax...

    ExtJSWeb应用程序开发指南(第2版)

    第3章 ExtJS4.0的基本功能 3.1 ExtJS组件配置说明 3.1.1 JSON介绍 3.1.2 ExtJS组件配置方式介绍 3.2 信息提示框组件介绍 3.2.1 认识Ext.window.MessageBox 3.2.2 Ext.MessageBox.alert() 3.2.3 Ext....

    学习ExtJS Panel常用方法

    第二个参数可选,默认为 `false`,如果设置为 `true`,则在移除组件后会销毁该组件。 - 示例代码: ```javascript var panel = new Ext.Panel(); var button = new Ext.Button({ text: '按钮' }); panel.add...

    ExtJS+Web应用程序开发指南

    主要包括三个大的文件:ext-all.css,ext-base.js,ext-all.js(包括所有的类库,您可以根据需要进行删减。官方网站提供这一接口),在引用ext类库的时候,这三个文件必不可少。 它提供了丰富的,非常漂亮的外观体验,...

Global site tag (gtag.js) - Google Analytics