ExtJs4 笔记(12) Ext.toolbar.Toolbar 工具栏、Ext.toolbar.Paging 分页栏、Ext.ux.statusbar.StatusBar 状态栏
本篇讲解三个工具栏控件。其中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 状态栏的更多相关文章
- [转载]ExtJs4 笔记(12) Ext.toolbar.Toolbar 工具栏、Ext.toolbar.Paging 分页栏、Ext.ux.statusbar.StatusBar 状态栏
作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...
- ExtJs4 笔记(4) Ext.XTemplate 模板
ExtJs4 笔记(4) Ext.XTemplate 模板 摘自:http://www.cnblogs.com/lipan/ 本篇将涉及到ExtJs中一个重要的概念,模板.话说Razor很神奇,但是我 ...
- [转载]ExtJs4 笔记(9) Ext.Panel 面板控件、 Ext.window.Window 窗口控件、 Ext.container.Viewport 布局控件
作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...
- ExtJs4 笔记(9) Ext.Panel 面板控件、 Ext.window.Window 窗口控件、 Ext.container.Viewport 布局控件
本篇讲解三个容器类控件. 一.面板控件 Ext.Panel 一个面板控件包括几个部分,有标题栏.工具栏.正文.按钮区.标题栏位于最上面,工具栏可以在四个位置放置,围绕中间部分正文,按钮区位于最小方.下 ...
- Ext.Net学习笔记12:Ext.Net GridPanel Filter用法
Ext.Net学习笔记12:Ext.Net GridPanel Filter用法 Ext.Net GridPanel的用法在上一篇中已经介绍过,这篇笔记讲介绍Filter的用法. Filter是用来过 ...
- 在toolbar里动态创建多个button(ext.net)
private void setOneMenu() { string sql = "select id,name,gids from Config where name<>'高级 ...
- [转载]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 笔记(8) Ext.slider 滚轴控件、 Ext.ProgressBar 进度条控件、 Ext.Editor 编辑控件
本篇要登场的有三个控件,分别是滚轴控件.进度条控件和编辑控件. 一.滚轴控件 Ext.slider 1.滚轴控件的定义 下面我们定义三个具有代表意义滚轴控件,分别展示滚轴横向.纵向,以及单值.多值选择 ...
随机推荐
- nginx区分手机与电脑浏览器并进入相应站点
本文要讲的的是如何使用nginx区分pc和手机访问不同的网站,是物理上完全隔离的两套网站(一套移动端.一套pc端),这样带来的好处pc端和移动端 的内容可以不一样,移动版网站不需要包含特别多的内容,只 ...
- SpringMVC入门二: 1规范结构, 2简单整合MyBatis
昨天拿springMVC写的helloworld结构不好, 这次先调整一下体系结构 , 然后简单整合一下MyBatis spring的配置还是以注解为主, 不过MyBatis的映射文件什么的还是拿xm ...
- 基于visual Studio2013解决算法导论之048红黑树
题目 红黑树 解决代码及点评 // 红黑树.cpp : 定义控制台应用程序的入口点. // #include <stdio.h> #include <stdlib.h> ...
- 使用 stvd 编译STM8S 时能看到使用RAM ROM大小的方法
刚刚安装的STVD编译器,编译时候不显示用了多少RAM和ROM?对于此问题.有两个方法:一是看.map文件 还有一种是 添加一个补丁,详细操作例如以下,能够在我的资源里下载对应的文件. http:// ...
- 百度编辑器ueditor简单易用
最近刚刚被分配任务给一个新闻发布,它采用了富文本编辑器.本人也被用于,只是这一次我选择了百度的富文本编辑器ueditor1_4_3-utf8-jsp版. 事实上看ueditor功能非常强大,只是百度的 ...
- 1076: [SCOI2008]奖励关( dp )
期望状压dp.... ------------------------------------------------------------------ #include<cstdio> ...
- java中可以出现的中文乱码的集中解决
从学习javaweb开始就会经常遇到中文乱码,今天就做以下记录: 1. 要避免项目中遇到乱码,首先就是在搭建项目的设置工作空间的字符编码,若是多人开发,就更应该做到统一,在eclipse中选择widn ...
- Javascript DOM 02 在<ul>中创建、删除 <li>
创建DOM元素 createElement(标签名) 创建一个节点 appendChild(节点) 追加一个节点 例子:为ul插入li 插入元素 insertBefore(节点, 原有节点) 在 ...
- IOS引导页的编写
我们在第一次打开App的时候,通常不是直接进入App主界面,而是会有一个能左右滑动.介绍App功能的界面.我是用NSUserDefaults + UIScrollview实现. 新建一个类,继承UIV ...
- 使用 Spring RestTemplate 调用 rest 服务时自定义请求头(custom HTTP headers)
在 Spring 3.0 中可以通过 HttpEntity 对象自定义请求头信息,如: private static final String APPLICATION_PDF = "app ...