《回到系列目录

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

一、Ext.toolbar.Toolbar

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

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

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

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

[Js]

    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]

        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]

    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]

{text: "搜索",handler: function () {store.load({ params: { keyword: filed1.getValue()} });}}

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

[Js]

    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]

    var bbar = Ext.create('Ext.toolbar.Toolbar', {layout: {overflowHandler: 'Menu'},items: ["溢出测试", "溢出测试", "溢出测试", "溢出测试", "溢出测试", "溢出测试", "溢出测试","溢出测试", "溢出测试",{xtype: "button",text: "溢出按钮",handler: function () {Ext.Msg.alert("提示", "工具栏按钮被点击");}}, { text: "溢出按钮", xtype: "splitbutton"}]});

预览下效果:

3.在右侧的工具栏

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

[Js]

    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.onReady(function () {Ext.QuickTips.init();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();var listView = Ext.create('Ext.ListView', {store: store,multiSelect: true,emptyText: '当前没有数据展示',reserveScrollOffset: true,columns: [{header: "IntData",dataIndex: 'IntData'}, {header: "StringData",dataIndex: 'StringData'}, {header: "TimeData",dataIndex: 'TimeData',align: 'right',xtype: 'datecolumn',format: 'm-d h:i a'}]});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()} });}}]});var bbar = Ext.create('Ext.toolbar.Toolbar', {layout: {overflowHandler: 'Menu'},items: ["溢出测试", "溢出测试", "溢出测试", "溢出测试", "溢出测试", "溢出测试", "溢出测试","溢出测试", "溢出测试",{xtype: "button",text: "溢出按钮",handler: function () {Ext.Msg.alert("提示", "工具栏按钮被点击");}}, { text: "溢出按钮", xtype: "splitbutton"}]});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'}]});});

二、Ext.toolbar.Paging

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

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

[Js]

    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]

        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]

    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]

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

展示效果:

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

展示效果:

完整的代码:

[Js]

Ext.Loader.setConfig({ enabled: true });
Ext.Loader.setPath('Ext.ux', '/ExtJs/ux');
//Ext.Loader.setPath('Ext.ux.DataView', '/ExtJs/ux/DataView');Ext.onReady(function () {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});var tpl = new Ext.XTemplate('<table cellpadding=0 cellspacing=0 border=1 width=450px>','<tr><td colspan=3 align=center><b><font color=red>Ext.view.View取自服务端的数据表</font></b></td></tr>','<tr><td style="width:20%"><b>编号</b></td><td  style="width:50%"><b>消息</b></td><td style="width:30%"><b>日期</b></td>','<tpl for=".">','<tr class="data"><td class="x-editable">{IntData}</td><td>{StringData}</td><td>{TimeData}</td></tr>','</tpl>','</table>');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);}}],plugins: Ext.create('Ext.ux.SlidingPager', {})//plugins: Ext.create('Ext.ux.ProgressBarPager', {})})});
});

三、Ext.ux.statusbar.StatusBar

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

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

[Js]

    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]

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

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

[Js]

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

第三个为清除状态:

[Js]

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

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

完整的代码:

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();}}]})});
});

[Js]

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

转载于:https://www.cnblogs.com/lipan/archive/2011/12/23/2298746.html

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

  1. ExtJs4 笔记(3) Ext.Ajax 对ajax的支持

    原文地址为: ExtJs4 笔记(3) Ext.Ajax 对ajax的支持 <回到系列目录 本篇主要介绍一下ExtJs常用的几个对JS语法的扩展支持,包括Ajax封装,函数事件操作封装,还有扩展 ...

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

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

  3. ExtJs4 笔记 Ext.tab.Panel 选项卡

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

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

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

  5. ExtJs4 笔记(5) Ext.Button 按钮

    id="li2"></li><li id="li3"></li></ul></div>< ...

  6. [转载]ExtJs4 笔记(2) ExtJs对js基本语法扩展支持

    作者:李盼(Lipan) 出处:[Lipan] (http://www.cnblogs.com/lipan/) 本篇主要介绍一下ExtJs对JS基本语法的扩展支持,包括动态加载.类的封装等. 一.动态 ...

  7. 《JavaScript高级程序设计》读书笔记 -12.1 window对象

    <JavaScript高级程序设计>读书笔记 -12.1 window对象 12.1 window对象 12.1.1 Global作用域 12.1.2 窗口关系[不是很懂] 12.1.3 ...

  8. 《Ext JS权威指南》——2.1节获取Ext JS 4

    第2章 从"Hello World"开始 "Hello World"几乎已经成为所有开发类图书的必用案例,本书也不能免俗.本章将通过编写"Hello ...

  9. MyBatis-学习笔记12【12.Mybatis注解开发】

    Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...

  10. 安卓开发toolbar设置logo_Android之ToolBar的使用

    Toolbar是在 Android 5.0 开始推出的一个 Material Design 风格的导航控件 ,Google 非常推荐大家使用 Toolbar 来作为Android客户端的导航栏,以此来 ...

最新文章

  1. su mysql bash 4.1_故障案例: 进入到心创建的用户中,系统会提示-bash-4.1$,请问如何解决?...
  2. MySQL alter
  3. oracle数据库视图存放位置,oracle数据库审计
  4. 手动安装sys驱动文件_海龙工具的正确安装及卸载方法,自己动手丰衣足食
  5. 练习7-11 字符串逆序 (15分)
  6. PHP7 学习笔记(十一)使用phpstudy快速配置一个虚拟主机
  7. 发送不同类型的ActivityFeed
  8. 发短信接口获取验证码
  9. select语句一些要点(一)
  10. 从0到上线一个完整Java项目,需要具备哪些技能?
  11. 《Linux编程》上机作业 ·001【Linux命令】
  12. Android最全UI库合集
  13. 用户·角色·权限·表
  14. 一秒钟速算(WINFORM)
  15. 天肌处理器天梯排行榜2022 天肌处理器发布时间排行
  16. MySQL创建数据库、数据表 | 零基础自学SQL课程系列Day3
  17. 事件委托(事件代理)是什么?有什么用?
  18. SwiftUI SF Symbols 好处及其使用指南
  19. linux公社_如何在Linux中安装和使用dig和nslookup命令
  20. Blo Tx Pending

热门文章

  1. 【知识图谱】BERT meet KG 第二弹:新训练方式,新问题视角
  2. 这样的Softmax你真的不了解!
  3. 【python】Tkinter可视化窗口(一)
  4. TF-tf.keras.layers.Attention-Attention机制
  5. 与TensorFlow类似的项目有哪些?TensorFlow的优缺点是什么?
  6. 开心记账本 投资理财两不误
  7. 幻灯片形式设计:从方法到技巧
  8. byte 类型_Go 语言string 也是引用类型
  9. ios弧形进度条_iOS实现一个颜色渐变的弧形进度条
  10. java程序设计实验结论_实验报告三