博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]ExtJs4 笔记(13) Ext.menu.Menu 菜单、Ext.draw.Component 绘图、Ext.resizer.Resizer 大小变更...
阅读量:5143 次
发布时间:2019-06-13

本文共 4772 字,大约阅读时间需要 15 分钟。

作者:李盼(Lipan)

出处: ()
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。

 

本篇讲解菜单、绘图、还有大小变更控件。菜单控件可以附加到各种其他控件中,比如按钮、工具栏等,甚至可以直接通过通过右键打开(模拟右键菜单);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          
//是否彻底隐藏调节边框
    
});
});

 

效果如下:

转载于:https://www.cnblogs.com/BTMaster/p/4082536.html

你可能感兴趣的文章
本周内容
查看>>
通过Jenkins调用自动部署war包及jar包到服务器上的Shell脚本
查看>>
docker 日志管理
查看>>
sublime dockerfile 语法高亮
查看>>
InputStream、InputStreamReader和Reader的关系
查看>>
js兼容公用方法
查看>>
如何将应用完美迁移至Android P版本
查看>>
【转】清空mysql一个库中的所有表的数据
查看>>
基于wxPython的python代码统计工具
查看>>
淘宝JAVA中间件Diamond详解(一)---简介&快速使用
查看>>
一种简单的数据库性能测试方法
查看>>
如何给JavaScript文件传递参数
查看>>
开源 高性能 高可用 可扩展
查看>>
JDBC
查看>>
Struts2(十三)国际化-internationalization
查看>>
经典SQL语句基础50题
查看>>
vs2010 无法加载 asp.net mvc2 项目标解决规划
查看>>
去掉^M
查看>>
前台线程和后台线程
查看>>
前端 HTML body标签相关内容 常用标签 表格标签 table
查看>>