ExtJs4 笔记(13) Ext.menu.Menu 菜单、Ext.draw.Component 绘图、Ext.resizer.Resizer 大小变更
本篇讲解菜单、绘图、还有大小变更控件。菜单控件可以附加到各种其他控件中,比如按钮、工具栏等,甚至可以直接通过通过右键打开(模拟右键菜单);ext对绘图的支持可以让我们通过js来绘图;大小变更控件可以让各种html元素获取可变更大小的能力。下面我们一一详细介绍。
一、Ext.menu.Menu 菜单
1.菜单的定义
下面我们来定义一个菜单,它包括一个下拉列表,还有颜色选择器,日期选择器等菜单项。
[Js]
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
//下定义一个下拉列表var combo = Ext.create('Ext.form.ComboBox', { store: new Ext.data.ArrayStore({ fields: ['id', 'name'], data: [[1, "张三"], [2, "李四"], [3, "王五"], [4, "赵六"]] }), displayField: 'name', typeAhead: true, mode: 'local', triggerAction: 'all', emptyText: '请选择..', selectOnFocus: true, width: 135});//这里是菜单的定义var menu = Ext.create('Ext.menu.Menu', { id: 'mainMenu', style: { overflow: 'visible' }, items: [ combo, { text: '复选框', checked: true }, '-', { text: '单选子菜单', menu: { items: [ '<b>请选择一个人名</b>', { text: '张三', checked: true, group: 'theme' }, { text: '李四', checked: false, group: 'theme', checkHandler: function () { Ext.MessageBox.alert("消息", "李四被选择!") } }, { text: '王五', checked: false, group: 'theme' }, { text: '赵六', checked: false, group: 'theme' } ] } }, { text: '请选择一个日期', menu: Ext.create('Ext.menu.DatePicker', { handler: function (dp, date) { Ext.MessageBox.alert('消息', '你选择了:' + date.format('Y-m-d')); } }) }, { text: '选择一个颜色', menu: Ext.create('Ext.menu.ColorPicker', { handler: function (cm, color) { Ext.MessageBox.alert('消息', '你选择了:' + color); } }) } ]}); |
2.把菜单附加到面板工具栏
我们定义一个面板,然后通过刚刚定义的菜单实现菜单栏。
[Js]
|
1
2
3
4
5
6
7
8
9
10
|
//把菜单附加到工具栏上var panel = new Ext.Panel({ renderTo: 'div1', width: 600, height: 250, collapsible: true, layout: 'fit', title: '演示工具栏', tbar: [{ text: "菜单", menu: menu}]}); |
下面看看展示效果:

2.实现右键菜单
还是用第一步定义的菜单,现在我们通过右键事件的方式实现右键菜单:
[Js]
|
1
2
3
4
5
6
7
8
9
|
//定义右键菜单Ext.getDoc().on('contextmenu', function (e, o) { e.preventDefault(); menu.showAt(e.getXY()); //第二种写法: //e.stopEvent(); //menu.showAt([e.getPageX(), e.getPageY()]);}); |
单击右键,效果如下:

3.在ListView中定义右键菜单
这里我们借用第11篇的ListView,我们要实现当数据行右键单击时,弹出菜单的效果。
[Js]
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
var store = new Ext.data.JsonStore({ fields: [ { name: 'IntData', type: 'int' }, { name: 'StringData', type: 'string' }, { name: 'TimeData', type: 'date' } ], proxy: { type: 'ajax', url: 'ListView1Json', reader: { type: 'json', root: 'rows' } }, sortInfo: { field: 'IntData', direction: 'DESC' }});store.load();var listView = Ext.create('Ext.ListView', { renderTo: "div1", store: store, multiSelect: true, emptyText: '无数据', reserveScrollOffset: true, hideHeaders: false, columns: [{ header: "IntData", dataIndex: 'IntData' }, { header: "StringData", dataIndex: 'StringData' }, { header: "TimeData", dataIndex: 'TimeData', align: 'right', xtype: 'datecolumn', format: 'm-d h:i a' }], viewConfig: { stripeRows: true, listeners: { itemcontextmenu: function (view, rec, node, index, e) { e.stopEvent(); menu.showAt(e.getXY()); return false; } } }}); |
在ListView中单击右键,效果如下:

二、Ext.draw.Component 绘图
Ext支持通过js的方式绘图,可以绘制的包括基本图形圆形、矩形等,还可以描绘路径,因为它支持SVG路径语法。
1.实现文本绘图
[Js]
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
Ext.create('Ext.draw.Component', { renderTo: Ext.getBody(), viewBox: false, draggable: { constrain: true, //允许拖动 constrainTo: Ext.getBody() }, floating: true, autoSize: true, items: [{ type: 'text', text: '图形化的文本', fill: 'green', font: '16px Arial', rotate: { degrees: 45 } }]}); |
通过上面的代码,我们可以展示出图片式文本,效果如下:

2.基本图形,路径绘图
我们先通过基本图形绘制一个圆形,一个长方形,最后通过路径语法绘制一个等腰三角形:
[Js]
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
var drawComponent = Ext.create('Ext.draw.Component', { viewBox: false, items: [{ type: 'circle', //园 fill: '#79BB3F', radius: 100, x: 100, y: 100 }, { type: 'rect', //矩形 width: 50, height: 30, fill: '#f00', x: 0, y: 0 }, { type: "path", path: "M100 0 L150 50 L200 0 Z", //路径 "stroke-width": "1", stroke: "#000", fill: "blue" }]});Ext.create('Ext.Window', { width: 230, height: 250, layout: 'fit', items: [drawComponent]}).show(); |
效果如下:

三、Ext.resizer.Resizer 大小变更
官方示例上作者说,他奶奶都会写这段代码,所以我也不想多讲了,应该很简单。控件的实现方式如下:
[Js]
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
Ext.onReady(function () { var basic = Ext.create('Ext.resizer.Resizer', { target: 'basic', pinned: true, //是否显示调节边框 width: 200, height: 100, minWidth: 100, minHeight: 50, dynamic: true, //动态设置 preserveRatio: true, //当变更大小时,长宽比例是否固定 heightIncrement: 20, //单次变更,高度变更值 widthIncrement: 20, transparent: false //是否彻底隐藏调节边框 });}); |
效果如下:

ExtJs4 笔记(13) Ext.menu.Menu 菜单、Ext.draw.Component 绘图、Ext.resizer.Resizer 大小变更的更多相关文章
- [转]ExtJs4 笔记(13) Ext.menu.Menu 菜单、Ext.draw.Component 绘图、Ext.resizer.Resizer 大小变更
作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...
- [转载]ExtJs4 笔记(12) Ext.toolbar.Toolbar 工具栏、Ext.toolbar.Paging 分页栏、Ext.ux.statusbar.StatusBar 状态栏
作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...
- ExtJs4 笔记(12) Ext.toolbar.Toolbar 工具栏、Ext.toolbar.Paging 分页栏、Ext.ux.statusbar.StatusBar 状态栏
本篇讲解三个工具栏控件.其中Ext.toolbar.Toolbar可以用来放置一些工具类操控按钮和菜单,Ext.toolbar.Paging专门用来控制数据集的分页展示,Ext.ux.statusba ...
- ExtJs4 笔记(4) Ext.XTemplate 模板
ExtJs4 笔记(4) Ext.XTemplate 模板 摘自:http://www.cnblogs.com/lipan/ 本篇将涉及到ExtJs中一个重要的概念,模板.话说Razor很神奇,但是我 ...
- [转载]ExtJs4 笔记(10) Ext.tab.Panel 选项卡
作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...
- [转载]ExtJs4 笔记(9) Ext.Panel 面板控件、 Ext.window.Window 窗口控件、 Ext.container.Viewport 布局控件
作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...
- [转载]ExtJs4 笔记(5) Ext.Button 按钮
作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...
- ExtJs4 笔记(10) Ext.tab.Panel 选项卡
本篇讲解选项卡控件. 一.基本选项卡 首先我们来定义一个基本的选项卡控件,其中每个Tab各有不同,Tab的正文内容可以有三种方式获取: 1.基本方式:通过定义html和items的方式. 2.读取其他 ...
- ExtJs4 笔记(9) Ext.Panel 面板控件、 Ext.window.Window 窗口控件、 Ext.container.Viewport 布局控件
本篇讲解三个容器类控件. 一.面板控件 Ext.Panel 一个面板控件包括几个部分,有标题栏.工具栏.正文.按钮区.标题栏位于最上面,工具栏可以在四个位置放置,围绕中间部分正文,按钮区位于最小方.下 ...
随机推荐
- 设计模式 ( 十五 ) 中介者模式Mediator(对象行为型)
设计模式 ( 十五 ) 中介者模式Mediator(对象行为型) 1.概述 在面向对象的软件设计与开发过程中,根据“单一职责原则”,我们应该尽量将对象细化,使其只负责或呈现单一的职责,即将行为分布到各 ...
- PHP - mysql使用参数数据
"SELECT dg_id FROM dg_user WHERE dg_username = '{$clean['username']}' LIMIT 1","该用户已经 ...
- CentOS 如何安装git server + Gitolite 【配置不成功需要再测试2015-8-20】
安装git 关于安装git 可以参考 http://gitolite.com/gitolite/install.html 里面有官方的介绍 1. Git 的工作需要调用 curl,zlib,open ...
- HDOJ 2680 Dijkstra
题目大意: 给你一个有向图,一个起点集合,一个终点,求最短路.... 解题思路: 1.自己多加一个超级源点,把起点集合连接到超级源点上,然后将起点与超级源点的集合的路径长度设为0,这样就称为一个n+1 ...
- printf格式控制详解
format 参数输出的格式,定义格式为 %[flags][width][.precision][length]specifier specifier在最后面.定义了数据类型. Where the s ...
- boost:regex分割字符串(带有'\'字符) - zzusimon的专栏 - 博客频道 - CSDN.NET
boost:regex分割字符串(带有'\'字符) - zzusimon的专栏 - 博客频道 - CSDN.NET boost:regex分割字符串(带有'\'字符) 分类: C++ 2011-08- ...
- Git现实(四)状态转换
前Git实战(三)环境搭建博文.我们大致解说了一下git的环境安装.今天我们解说一下Git的状态转换. 学习版本号控制工具.对工具进行版本号控制之间的状态转换很重要. 毕竟Git仅仅是一个工具,假设不 ...
- 浅谈PPM (Project Portfolio Management) - 1
前言: 本文以纯理论性的PPM解说为主,不会涉及到具体怎样实施,我会在以后介绍具体的PPM实施方案介绍. PPM,可能非常多人并不清楚甚至可能没听说过,这是一个近些年才流行起来的概念,是Project ...
- WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer)
原文:WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济 ...
- [置顶] Objective-C ,ios,iphone开发基础:UIAlertView使用详解
UIAlertView使用详解 Ios中为我们提供了一个用来弹出提示框的类 UIAlertView,他类似于javascript中的alert 和c#中的MessageBox(); UIAlertVi ...