[转载]ExtJs4 笔记(12) Ext.toolbar.Toolbar 工具栏、Ext.toolbar.Paging 分页栏、Ext.ux.statusbar.StatusBar 状态栏
作者:李盼(Lipan)
出处:[Lipan] (http://www.cnblogs.com/lipan/)
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。
本篇讲解三个工具栏控件。其中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();} |
展示效果,分别是加载、错误、和清除状态:



完整的代码:
|
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
|
Ext.Loader.setConfig({ enabled: true });Ext.Loader.setPath('Ext.ux', '/ExtJs/ux');Ext.onReady(function () { 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); }; var panel = new Ext.Panel({ renderTo: "div1", width: 600, height: 250, collapsible: true, //layout: 'fit', title: '演示状态栏', items: [{ xtype: "button", text: "测试", id:"button1", handler: function (btn, statusBar) { loadFn("button1", "statusbar1"); } }], bbar: Ext.create('Ext.ux.statusbar.StatusBar', { id: 'statusbar1', defaultText: '就绪', text: '没有任务', iconCls: 'x-status-valid', items: [ { xtype: 'button', text: '设置状态', handler: function () { var sb = Ext.getCmp('statusbar1'); sb.setStatus({ text: '错误!', iconCls: 'x-status-error', clear: true // 自动清除状态 }); } }, { xtype: 'button', text: '设置为加载状态', handler: function () { var sb = Ext.getCmp('statusbar1'); sb.showBusy(); } }, { xtype: 'button', text: '清除状态', handler: function () { var sb = Ext.getCmp('statusbar1'); sb.clearStatus(); } } ] }) });}); |
[转载]ExtJs4 笔记(12) Ext.toolbar.Toolbar 工具栏、Ext.toolbar.Paging 分页栏、Ext.ux.statusbar.StatusBar 状态栏的更多相关文章
- ExtJs4 笔记(12) Ext.toolbar.Toolbar 工具栏、Ext.toolbar.Paging 分页栏、Ext.ux.statusbar.StatusBar 状态栏
本篇讲解三个工具栏控件.其中Ext.toolbar.Toolbar可以用来放置一些工具类操控按钮和菜单,Ext.toolbar.Paging专门用来控制数据集的分页展示,Ext.ux.statusba ...
- [转载]ExtJs4 笔记(9) Ext.Panel 面板控件、 Ext.window.Window 窗口控件、 Ext.container.Viewport 布局控件
作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...
- [转载]ExtJs4 笔记(8) Ext.slider 滚轴控件、 Ext.ProgressBar 进度条控件、 Ext.Editor 编辑控件
作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...
- [转载]ExtJs4 笔记(6) Ext.MessageBox 消息对话框
作者:李盼(Lipan) 出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法 ...
- [转载]ExtJs4 笔记(5) Ext.Button 按钮
作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...
- [转载]ExtJs4 笔记(2) ExtJs对js基本语法扩展支持
作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/) 本篇主要介绍一下ExtJs对JS基本语法的扩展支持,包括动态加载.类的封装等. 一.动态引 ...
- [转载]ExtJs4 笔记(11) Ext.ListView、Ext.view.View 数据视图
本篇介绍两个用来展示数据的容器控件,分别是Ext.ListView和Ext.view.View.Ext.ListView就是大名鼎鼎的 Ext GridPanel的前身,不过现在的Ext4已经将它整合 ...
- [转载]ExtJs4 笔记(10) Ext.tab.Panel 选项卡
作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...
- [转载]ExtJs4 笔记(7) Ext.tip.ToolTip 提示
作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...
随机推荐
- 如何使用 HTML5 Canvas 制作水波纹效果
今天,我们继续分享 JavaScript 实现的效果例子,这篇文章会介绍使用 JavaScript 实现水波纹效果.水波效果以图片为背景,点击图片任意位置都会触发.有时候,我们使用普通的 Javasc ...
- Atitit.提升电子商务安全性 在线充值功能安全方面的设计
Atitit.提升电子商务安全性 在线充值功能安全方面的设计 1. 防止dataservcie对充值订单表的直接改写,只能通过api,不能通过sql1 1.1. Order_id的安全取值,注入检测1 ...
- ArcGIS Server 10.1发布数据源为ArcSDE(直连)的MXD【转】
因为ArcSDE10.1基本默认直连,所以我们在发布直连的MXD仍然需要注意相关的事宜. 1:保证两台机器都能够访问共享存储的信息 2:确保已UNC路径保存ArcCatalog的文件夹连接,而且直连的 ...
- Linux新手扫盲
一. Linux特点 1.免费/开源: 2.支持多线程/多用户: 3.安全性好: 4.对内存和文件管理优越. Linux最小只需4M ——> 嵌入式开发 二. 文件目录 Linux系统所有软硬件 ...
- 【iOS】使用CoreText实现图文混排
iOS没有现成的支持图文混排的控件,而要用多个基础控件组合拼成图文混排这样复杂的排版,是件很苦逼的事情.对此的解决方案有使用CoreText进行绘制,或者使用TextKit.本文主要讲解对于CoreT ...
- js图形网站
在做项目的时候难免会遇到要画各式各样的图形,这里推荐一个网站 http://echarts.baidu.com/doc/example.html 这个网站各种各样的图形都有,还有案例,相当不错
- Swift开发第十一篇——Designated、Convenience和Required
本篇主要讲解 Swift 中 Designated.Convenience和 Required 的使用: 在 OC 中 init 方法是非常不安全的,没人能够保证 init 只被调用一次,也没有人保证 ...
- iOS之 FBMemoryProfiler FB的循环引用检测工具
经过两天的google终于搞定了FBMemoryProfiler这个开源检测循环引用的工具.中间的曲折也是让人头疼,言归正传直接说一下这个memoryProfiler github:https://g ...
- Sumlime Text编辑文件后快速刷新浏览器
作为Web开发人员,我们经常会这么做:在编辑器中调整代码,保存文件,切换到浏览器,然后刷新浏览器页面来查看结果.在代码编辑过程中,我们需要重复进行很多次这些操作. 如果你使用的是Sublime Tex ...
- ORACLE TO_CHAR函数格式化数字的出现空格的原因
在这篇博客SQL挑战--如何高效生成编码里面我由于需要将数字格式化为字符,像12需要格式化0012这样的字符,所以使用了TO_CHAR(数字,'0000')这样的写法,后面0000表示缺省补零,测试过 ...