[转载]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/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...
随机推荐
- Wrangle – 响应式的,触摸友好的多选插件
Wrangle 是一个响应式,触摸友好的选择插件,支持 jQuery 以及 Zepto.Wrangle 为多项选择提供了一个独特的方法:通过画一条贯穿项目的线条来选择项目.它给你的应用程序的一种新的方 ...
- Cool!15个创意的 CSS3 文本效果【下篇】
这里文章收集了15个创意的 CSS3 文本效果,所有的都是精心挑选,这些可能会增加创意的火花到你的下一个项目.其中有些是用于特定用途,而另一些则适用于多种用途.如果你想要一个精彩而又充满色彩的文字效果 ...
- 轻松掌握:JavaScript享元模式
享元模式 在JavaScript中,浏览器特别是移动端的浏览器分配的内存很有限,如何节省内存就成了一件非常有意义的事情.节省内存的一个有效方法是减少对象的数量. 享元模式(Flyweight),运行共 ...
- js编写当天简单日历
之前一直很想用javascript写一个日历,但是因为完全没有好的思路, 所以迟迟没有尝试.最近在网上刚好看到用javascript编写的简单日历的例子,代码量虽然不大, 但是我觉得很好地阐述了js日 ...
- 有效解决 iOS The document “(null)” requires Xcode 8.0 or later.
下载了一个 xocde8beta版本 运行之后 结果 在xcode7.3上再运行 就报这句错误 以下链接 是非常有效的解决办法 不信你试试 [链接]Thisversiondoesnotsu ...
- 【代码笔记】iOS-点击一个按钮会出现多个按钮的动画效果
一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...
- Hibernate缓存原理与策略
Hibernate缓存原理: 对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状态的管理,OR关系的映射等 ...
- WPExpress78_update 离线包
http://115.com/lb/5lb7rnbr#Windows Phone SDK update for WP 7.8115网盘礼包码:5lb7rnbr 使用/layout下载的,相信很多朋友已 ...
- 在VC环境下执行代码出现错误
这是在执行代码过程中出现的错误,源代码在别的电脑上能运行,在自己的VC里运行就出现错误,在网上也搜过解决办法,但还是有点不太理解,是编程环境的问题h还是代码本身也存在问题???
- servlet 学习(二)
一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...