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

一、Ext.toolbar.Toolbar

工具栏控件可以被附加在面板、窗口等容器类控件中,可以在四个方位添加多个工具栏控件。我们演示多个Ext.toolbar.Toolbar控件,然后附加到面板的不同位置。

1.在工具栏上添加菜单、按钮、搜索功能

我们这里借用上一篇所讲到的listview控件作为数据展示,把listview放入一个面板控件中,然后把工具栏添加到面板顶部,并且在工具栏中实现数据集的服务端搜索的功能。

首先我们定义一个数据模型和Store:

[Js]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Ext.define('Datas', {
    extend: 'Ext.data.Model',
    fields: [
    { name: 'IntData', type: 'int' },
    { name: 'StringData', type: 'string' },
    { name: 'TimeData', type: 'date' }
   ],
    proxy: {
        type: 'ajax',
        url: 'Toolbar1Json',
        reader: {
            type: 'json',
            root: 'rows'
        }
    }
});
 
var store = new Ext.data.Store({
    model: 'Datas',
    sortInfo: { field: 'IntData', direction: 'DESC' },
    autoLoad: true
});
store.load();

服务端的json输出代码:

[C# Mvc]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public JsonResult Toolbar1Json(string keyword)
{
 
    var rows = BasicData.Table.Take(10).Select(x => new
        {
            IntData = x.IntData,
            StringData = x.StringData,
            TimeData = x.TimeData.ToShortDateString()
        });
    if (!string.IsNullOrEmpty(keyword))
    {
        rows = rows.Where(x => x.IntData.ToString() == keyword || x.StringData.Contains(keyword) || x.TimeData.Contains(keyword));
    }
    var json = new
    {
        results = BasicData.Table.Count,
        rows = rows
    };
    return Json(json, JsonRequestBehavior.AllowGet);
}

接着定义一个listView,来自上篇

现在我们要定义一个toolbar,在工具栏里面添加了工具按钮、普通文字、分割线、和菜单,还实现了搜索的功能:

[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
var filed1 = new Ext.form.Field();
 
var tbar = Ext.create("Ext.Toolbar", {
    items: ['文字', "-", {
        xtype: "splitbutton",
        text: "按钮"
    }, {
        text: "菜单",
        menu:
        {
            items: [
                {
                    text: '选项1'
                }, {
                    text: '选项2'
                }, {
                    text: '选项3',
                    handler: function () {
                        Ext.Msg.alert("提示", "来自菜单的消息");
                    }
                }
            ]
        }
    }, "->", "关键字:", filed1, {
        text: "搜索",
        handler: function () {
            store.load({ params: { keyword: filed1.getValue()} });
        }
    }
    ]
});

注意这里,我们通过load store,把keyword关键字传给了c#的action参数:

[Js]

1
2
3
4
5
6
{
            text: "搜索",
            handler: function () {
                store.load({ params: { keyword: filed1.getValue()} });
            }
        }

最后我们定义一个Panel,把listView和toolbar都添加到Panel上,注意,tbar表示了这个工具栏在上方。

[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: '演示工具栏',
    items: listView,
    tbar: tbar
});

大功告成,我们来看看效果:

我们输入关键字“6”后查看过滤效果:

2.溢出测试

如果工具栏上的item项目过多,而面板的长度不够那会怎么样?我们需要设置 overflowHandler: 'Menu',代码如下:

[Js]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var bbar = Ext.create('Ext.toolbar.Toolbar', {
    layout: {
        overflowHandler: 'Menu'
    },
    items: ["溢出测试", "溢出测试", "溢出测试", "溢出测试", "溢出测试", "溢出测试", "溢出测试",
    "溢出测试", "溢出测试",
    {
        xtype: "button",
        text: "溢出按钮",
        handler: function () {
            Ext.Msg.alert("提示", "工具栏按钮被点击");
        }
    }, { text: "溢出按钮", xtype: "splitbutton"}]
});

预览下效果:

3.在右侧的工具栏

现在我们要实现放置在右侧的工具栏,这次我们直接在面板的代码里面写,代码如下:

[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
var panel = new Ext.Panel({
    renderTo: "div1",
    width: 600,
    height: 250,
    collapsible: true,
    layout: 'fit',
    title: '演示工具栏',
    items: listView,
    tbar: tbar,
    bbar: bbar,
    rbar: [{
        iconCls: 'add16',
        tooltip: '按钮1'
    },
        '-',
        {
            iconCls: 'add16',
            tooltip: {
                text: '按钮2',
                anchor: 'left'
            }
        }, {
            iconCls: 'add16'
        }, {
            iconCls: 'add16'
        },
        '-',
        {
            iconCls: 'add16'
        }
    ]
});

预览下效果:

最后奉上完整的代码:

[Js]

二、Ext.toolbar.Paging

1.基本的分页工具栏控件

Ext.toolbar.Paging就是一个特殊的工具栏,它提供了数据集翻页的功能,下面我们看看store的实现:

[Js]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var store = Ext.create('Ext.data.Store', {
    fields: ['IntData', 'StringData', 'TimeData'],
    pageSize: 15,
    proxy: {
        type: 'ajax',
        url: 'PagingToolbar1Json',
        reader: {
            type: 'json',
            root: 'rows',
            totalProperty: 'results'
        }
    },
    autoLoad: true
});

对应的服务端mvc的代码如下:

[C# Mvc]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public JsonResult PagingToolbar1Json(int start, int limit)
{
    var json = new
    {
        results = BasicData.Table.Count,
        rows = BasicData.Table.Skip(start).Take(limit).Select(x => new
        {
            IntData = x.IntData,
            StringData = x.StringData,
            TimeData = x.TimeData.ToShortDateString()
        })
    };
    return Json(json, JsonRequestBehavior.AllowGet);
}

现在我们借用上篇的Ext.view.View控件,把它放置到一个面板中,面板的代码如下:

[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
var panel = Ext.create('Ext.Panel', {
    renderTo: "div1",
    frame: true,
    width: 535,
    autoHeight: true,
    collapsible: true,
    layout: 'fit',
    title: '分页控件用在View',
    items: Ext.create('Ext.view.View', {
        store: store,
        tpl: tpl,
        autoHeight: true,
        multiSelect: true,
        id: 'view1',
        overItemCls: 'hover',
        itemSelector: 'tr.data',
        emptyText: '没有数据',
        plugins: [
            Ext.create('Ext.ux.DataView.DragSelector', {}),
            Ext.create('Ext.ux.DataView.LabelEditor', { dataIndex: 'IntData' })
        ]
    }),
    bbar: Ext.create('Ext.toolbar.Paging', {
        store: store,
        displayInfo: true,
        items: [
            '-', {
                text: '第10页',
                handler: function () {
                    store.loadPage(10);
                }
            }]
    })
});

注意上述代码,我们在分页工具栏控件中加入了一个按钮,当单击这个按钮时,数据集自动翻到第十页。

最后我们看看展示效果:

2.扩展后的翻页控件

我们可以通过ux扩展支持定义不同风格的分页控件,这效果就像三国杀扩展包一样,我们可以通过滚轴控件和进度条控件去展示当前处于分页项的哪个位置。我们在分页控件的配置部分添加如下代码:

[Js]

1
plugins: Ext.create('Ext.ux.SlidingPager', {})

展示效果:

1
plugins: Ext.create('Ext.ux.ProgressBarPager', {})

展示效果:

完整的代码:

[Js]

三、Ext.ux.statusbar.StatusBar

这个状态栏控件也是ext的一个扩展支持,不过它就好像军争包一样,这次不是小小改进,而是一个全新的控件。

首先定义一个函数,它在前2秒将状态栏设置为繁忙状态,2秒后恢复:

[Js]

1
2
3
4
5
6
7
8
9
10
11
12
var loadFn = function (btn, statusBar) {
    btn = Ext.getCmp(btn);
    statusBar = Ext.getCmp(statusBar);
 
    btn.disable();
    statusBar.showBusy();
 
    Ext.defer(function () {
        statusBar.clearStatus({ useDefaults: true });
        btn.enable();
    }, 2000);
};

接着我们将要几个按钮到状态栏,第一个设置状态为错误:

[Js]

1
2
3
4
5
6
7
8
handler: function () {
    var sb = Ext.getCmp('statusbar1');
    sb.setStatus({
        text: '错误!',
        iconCls: 'x-status-error',
        clear: true // 自动清除状态
    });
}

第二个设置状态为加载中:

[Js]

1
2
3
4
handler: function () {
    var sb = Ext.getCmp('statusbar1');
    sb.showBusy();
}

第三个为清除状态:

[Js]

1
2
3
4
handler: function () {
    var sb = Ext.getCmp('statusbar1');
    sb.clearStatus();
}

展示效果,分别是加载、错误、和清除状态:

完整的代码:

[Js]

ExtJs4 笔记(12) Ext.toolbar.Toolbar 工具栏、Ext.toolbar.Paging 分页栏、Ext.ux.statusbar.StatusBar 状态栏的更多相关文章

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

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

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

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

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

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

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

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

  5. Ext.Net学习笔记12:Ext.Net GridPanel Filter用法

    Ext.Net学习笔记12:Ext.Net GridPanel Filter用法 Ext.Net GridPanel的用法在上一篇中已经介绍过,这篇笔记讲介绍Filter的用法. Filter是用来过 ...

  6. 在toolbar里动态创建多个button(ext.net)

    private void setOneMenu() { string sql = "select id,name,gids from Config where name<>'高级 ...

  7. [转载]ExtJs4 笔记(8) Ext.slider 滚轴控件、 Ext.ProgressBar 进度条控件、 Ext.Editor 编辑控件

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

  8. [转载]ExtJs4 笔记(6) Ext.MessageBox 消息对话框

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

  9. ExtJs4 笔记(8) Ext.slider 滚轴控件、 Ext.ProgressBar 进度条控件、 Ext.Editor 编辑控件

    本篇要登场的有三个控件,分别是滚轴控件.进度条控件和编辑控件. 一.滚轴控件 Ext.slider 1.滚轴控件的定义 下面我们定义三个具有代表意义滚轴控件,分别展示滚轴横向.纵向,以及单值.多值选择 ...

随机推荐

  1. QT5 动态链接库的创建和使用(QT自己做动态库给自己使用)

    记录一下QT5 动态链接库的创建和使用 在文章的最后有完成的代码供下载 1.创建动态链接库 先新建一个库项目 选择chose进入下一下页面,类型选择共享库,输入一个名称:我输入的是sld 再点击下一步 ...

  2. 转:python中函数curry化

    1 柯里化(Currying) 一个函数有多个参数,我们希望能固定其中几个参数的值. from functools import partial def foo(a,b,c): return a+b+ ...

  3. http 连接复用

    定义 Http/1.0每次请求都需要建立新的TCP连接,连接不能复用.Http/1.1新的请求可以在上次建立的tcp连接之上发送,连接可以复用. 优点 减少重复进行tcp三次握手的开销,提高效率.注意 ...

  4. 简单字符串处理 hdu2532 Engine

    本来可以把这篇文章放入上一篇文章里,不过做这个题花了一点时间,也有一点收获,同时觉得网上的这个题目可供参考的文章有些少,那么就单独成篇吧. 首先分析下题目思路: 这个题目是个模拟题,步骤也很清晰. 首 ...

  5. 学习linux能有什么用

    很多朋友装了 Linux,看着全新的菜单样式.陌生的程序,一下子脑袋就空了(特别是系统未安装中文语言支持时),不知该干点什么,于是一种强烈的想法涌上心头——还是先回瘟到死玩一会儿游戏再说吧~ 在这,我 ...

  6. SAX方式解析XML

    sax解析分为以下几步: 1 获取一个saxparserfactory 2 获取一个解析器 3 创建handler对象,这个myHandler是继承了DefaultHandler的一个类,这个实现类里 ...

  7. CentOS的配置文件

    /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc:为每一个 ...

  8. HTTP1.1协议中文版-RFC2616

    转自:http://www.cnpaf.net/Class/HTTP/200811/23277.html 说明 本文档规定了互联网社区的标准组协议,并需要讨论和建议以便更加完善.请参考 “互联网官方协 ...

  9. Rfc2898DeriveBytes解密如何通过java实现

    原文 Rfc2898DeriveBytes解密如何通过java实现 这个找了半天,还是不太懂,密码一点不懂,直接上来问了 Rfc2898DeriveBytes对应的是PBKDF2WithHmacSHA ...

  10. 相邻数字的基数等比确定进制问题pojg2972

    解决数制转换问题时,如果所给的数值不是用十进制表示的,一般用一个字符型数组来存放,数组的每个元素分别存储它的一位数字.然后按位转换求和,得到十进制表示,再把十进制转成成其他所求的进制表示.转成的结果也 ...