本篇讲解菜单、绘图、还有大小变更控件。菜单控件可以附加到各种其他控件中,比如按钮、工具栏等,甚至可以直接通过通过右键打开(模拟右键菜单);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 大小变更的更多相关文章

  1. [转]ExtJs4 笔记(13) Ext.menu.Menu 菜单、Ext.draw.Component 绘图、Ext.resizer.Resizer 大小变更

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...

  2. [转载]ExtJs4 笔记(12) Ext.toolbar.Toolbar 工具栏、Ext.toolbar.Paging 分页栏、Ext.ux.statusbar.StatusBar 状态栏

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...

  3. ExtJs4 笔记(12) Ext.toolbar.Toolbar 工具栏、Ext.toolbar.Paging 分页栏、Ext.ux.statusbar.StatusBar 状态栏

    本篇讲解三个工具栏控件.其中Ext.toolbar.Toolbar可以用来放置一些工具类操控按钮和菜单,Ext.toolbar.Paging专门用来控制数据集的分页展示,Ext.ux.statusba ...

  4. ExtJs4 笔记(4) Ext.XTemplate 模板

    ExtJs4 笔记(4) Ext.XTemplate 模板 摘自:http://www.cnblogs.com/lipan/ 本篇将涉及到ExtJs中一个重要的概念,模板.话说Razor很神奇,但是我 ...

  5. [转载]ExtJs4 笔记(10) Ext.tab.Panel 选项卡

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...

  6. [转载]ExtJs4 笔记(9) Ext.Panel 面板控件、 Ext.window.Window 窗口控件、 Ext.container.Viewport 布局控件

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...

  7. [转载]ExtJs4 笔记(5) Ext.Button 按钮

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...

  8. ExtJs4 笔记(10) Ext.tab.Panel 选项卡

    本篇讲解选项卡控件. 一.基本选项卡 首先我们来定义一个基本的选项卡控件,其中每个Tab各有不同,Tab的正文内容可以有三种方式获取: 1.基本方式:通过定义html和items的方式. 2.读取其他 ...

  9. ExtJs4 笔记(9) Ext.Panel 面板控件、 Ext.window.Window 窗口控件、 Ext.container.Viewport 布局控件

    本篇讲解三个容器类控件. 一.面板控件 Ext.Panel 一个面板控件包括几个部分,有标题栏.工具栏.正文.按钮区.标题栏位于最上面,工具栏可以在四个位置放置,围绕中间部分正文,按钮区位于最小方.下 ...

随机推荐

  1. 比较优势 - MBA智库百科

    比较优势 - MBA智库百科 比较优势 出自 MBA智库百科(http://wiki.mbalib.com/)   这是一个消除歧义页--使用相同或相近标题,而主题不同的条目列表.如果您是通过某个内部 ...

  2. Android大放送干:书籍、过程、工具等各种全

    完全干燥分享,本文收集Android制定必要的书籍.过程.具.新闻和杂志各种资源.它们能让你在Android开发之旅的各个阶段都受益. 入门 <Learning Android(中文版)> ...

  3. 大整数乘法python3实现

    因为python具有无限精度的int类型,所以用python实现大整数乘法是没意义的,可是思想是一样的.利用的规律是:第一个数的第i位和第二个数大第j位相乘,一定累加到结果的第i+j位上,这里是从0位 ...

  4. Widget小组件

    一.使用步骤: 1.建立Widget的样式布局文件widght,布局只支持几种,比如,相对布局,线性布局,帧布局,布局里支持的控件也是有限的. 2.在res下建立一个新的文件夹我的命名为xml 3.在 ...

  5. 第三届蓝桥杯 c/c++真题

    第三届蓝桥杯真题 c/c++ 以下题目我自己也并不是所有的题目都是一次性就能做对或是有结题思路的.有些题目也是经过查证网上相关的资料或是参考了别人的代码和解题思路才做出来的.总的来看,这份题目考了很多 ...

  6. 算法之旅,直奔<algorithm>之十 count_if

    count_if(vs2010) 引言 这是我学习总结<algorithm>的第十篇,这个重要的地方是设置条件.用的还是蛮多的.(今天下午挺恶心的,一下午就做一个面试题,调代码调傻了... ...

  7. Java数据流格式转换

    1 字节流InputStream                  ->FileInputStreamOutputStream                 ->FileOutputSt ...

  8. Java8 Lamdba表达式 001

    在一个已经存在的编程语言里非常少有对现有的生态系统起重大影响的新特性.Lambda表达式对于Java语言就是这样的意义的存在.简单来说,Lambda表达式提供了便利的方式去创建一个匿名的功能.提供了一 ...

  9. SAP超时问题

    其他常用的参数如下: login/system_client 登录时默认的Client号 login/password_expiration_time 密码有效期 login/fails_to_use ...

  10. linux登录windows服务器

    在公司同时也兼顾了王老师会议网站的任务,我喜欢用linux,而会议网站托管在windows系统上,虽然装了双系统,但我还是比较懒,不喜欢经常切换系统.还好,linux可以实现登录windows服务器. ...