通过store为toolbar添加按钮
目的是实现导航条toolbar可以动态加载按钮。
ExtJS的版本是4.0.
实现方案有两个。方案一:添加render事件监听,在监听事件处理函数中使用Ext.Ajax获取按钮信息,实现动态添加按钮。方案二:定义一个新的类,继承toolbar,为其添加store属性。
方案一比较简单,这里就不详述了。
方案二我们使用ExtJS的MVC做一个演示:
先上演示效果图:

以下是演示文件结构:

index.jsp代码:
1: <%@ page language="java" pageEncoding="utf-8"%>
2: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
3: <html>
4: <head>
5: <title>ExtJs MVC 演示</title>
6: <link rel="stylesheet" type="text/css" href="./extjs/resources/css/ext-all.css" />
7: <link rel="stylesheet" type="text/css" href="./theme/theme.css" />
8: </head>
9: <body>
10: <script type="text/javascript" src="./extjs/ext-debug.js"></script>
11: <script type="text/javascript" src="./extjs/locale/ext-lang-zh_CN.js"></script>
12: <script type="text/javascript" src="./app/app.js"></script>
13: </body>
14: </html>
app.js代码:
1: Ext.application({
2: name: 'demo',
3: controllers:['StoreBarController'],
4: autoCreateViewport: true
5: });
Viewport.js代码:
1: Ext.define('demo.view.Viewport', {
2: extend: 'Ext.container.Viewport',
3:
4: requires: ['demo.view.StoreBar'],
5:
6: layout: 'fit',
7:
8: items: [{
9: tbar: {xtype: 'storebar'}
10: }]
11: });
StoreBarController.js代码:
1: Ext.define('demo.controller.StoreBarController', {
2: extend: 'Ext.app.Controller',
3:
4: stores: ['BarStore'],
5: model: ['BarModel'],
6: views: ['StoreBar']
7: });
StoreBar.js的代码:
1: Ext.define('demo.view.StoreBar', {
2: extend: 'Ext.toolbar.Toolbar',
3: alias: 'widget.storebar',
4:
5: store: 'BarStore',
6:
7: initComponent: function() {
8: var me = this;
9: me.store = Ext.data.StoreManager.lookup(me.store || 'ext-empty-store');
10: me.on('render', me.addButtons);
11: this.callParent(arguments);
12: },
13:
14: addButtons: function(){
15: var me = this;
16: me.store.each(function(record){
17: me.add({
18: xtype: 'button',
19: scale: 'large',
20: iconAlign: 'top',
21: text: record.data.text,
22: iconCls: record.data.iconCls
23: });
24: });
25: }
26: });
BarStore.js代码:
1: Ext.define("demo.store.BarStore",{
2: extend:'Ext.data.Store',
3:
4: model: 'demo.model.BarModel',
5:
6: data:[{
7: text: '系统管理',
8: iconCls: 'icon-top-sys'
9: },{
10: text: '用户管理',
11: iconCls: 'icon-top-user'
12: }]
13: });
BarModel.js代码:
1: Ext.define('demo.model.BarModel', {
2: extend: 'Ext.data.Model',
3:
4: fields:['text', 'iconCls']
5: });
就是这几个文件了。相应的CSS文件以及图片什么的就不再一一列出了。有心的话可以自己试一下。
目前需要的数据是写在了store中,一般我们更喜欢将数据存储在数据库中。接下来做些调整,我们改为从服务器端获取数据。数据存储在store.json中:
1: {
2: success: true,
3: total: 2,
4: root: [
5: {id: 1, text: '系统管理', iconCls: 'icon-top-sys'},
6: {id: 2, text: '用户管理', iconCls: 'icon-top-user'}
7: ]
8: }
调整BarStore.js:
1: Ext.define('demo.store.BarStore', {
2: extend: 'Ext.data.Store',
3: model: 'demo.model.BarModel',
4:
5: proxy: {
6: type: 'ajax',
7: url: 'store.json',
8: reader: {
9: type: 'json',
10: root: 'root',
11: successProperty: 'success'
12: }
13: }
14: });
调整StoreBar.js的代码:
1: Ext.define('demo.view.StoreBar', {
2: extend: 'Ext.toolbar.Toolbar',
3: alias: 'widget.storebar',
4:
5: store: 'BarStore',
6:
7: initComponent: function() {
8: var me = this;
9: me.store = Ext.getStore('BarStore');
10: me.store.load({
11: scope: this,
12: callback: function(records) {
13: Ext.each(records, function(record){
14: me.add({
15: xtype: 'button',
16: scale: 'large',
17: iconAlign: 'top',
18: text: record.data.text,
19: iconCls: record.data.iconCls
20: });
21: });
22: }
23: });
24:
25: this.callParent(arguments);
26: }
27: });
这里对store进行了主动加载,添加按钮也是写在了store加载的callback函数中,目的是防止store加载出现延迟,按钮不能及时添加的情况。
demo演示资源下载:http://download.csdn.net/detail/tianxiexingyun/7332057
通过store为toolbar添加按钮的更多相关文章
- PyQt(Python+Qt)学习随笔:Qt Designer中怎么给toolBar添加按钮
在Designer中创建了一个MainWindow窗体,当想在其中的toolBar中添加toolButton时发现怎么也放不上去,最终才发现toolBar中的按钮只能通过直接拖拽Action编辑器中的 ...
- 如何往IE工具条添加按钮(转载)
如何往IE工具条添加按钮 问题提出:金山词霸.网络蚂蚁等软件安装后会向IE的工具条添加自己的按钮.按下按钮后还会作出相应的动作,这种功能是如何实现的呢?读完本文,您也可以将自己应用程序的按钮添加到IE ...
- 关于FlexPaper 2.1.2版本 二次开发 Logo 、打印、搜索、缩略图、添加按钮、js交互、右键菜单、书签等相关问题
2015-03-02 更新文章,由于需求修改,更改了flexpaper插件,故增加第9.10.11小节,下载代码时请注意. 先废话几句.最近用到文档在线浏览功能,之前用的是print2flash(一个 ...
- Stimulsoft.Report.web viewer控件添加按钮
当你购买了带源码的时候,你可以对源码进行修改以达到自己想要的效果,比较这里讲到的,向viewer控件工具栏添加按钮. 通过源码目录可以看出我们需要修改的有两部分代码 红色方块圈中的部分,[StiWeb ...
- iOS 封装添加按钮的方法
添加按钮 #pragma mark 添加按钮 - (void)addButtonWithImage:(NSString *)image highImage:(NSString *)highImage ...
- 今天遇到的点击添加按钮button_click代码段无法执行的问题
首先:本人小白一枚,刚入行,如有表述不当的地方,还请多多指教 网页界面如图: 当点击添加按钮后断点测试进入后台代码运行: 代码会先执行Page_Load页面,当加载完后Page_Load代码会跳转到m ...
- java 24 - 3 GUI之添加按钮
需求:把按钮添加到窗体,并对按钮添加一个点击事件. A:创建窗体对象 B:创建按钮对象 C:把按钮添加到窗体 D:窗体显示 注意:这里对按钮添加点击事件,同样使用监听器. 但是,这里的按钮是组件,所以 ...
- iOS开发UI篇—在UIImageView中添加按钮以及Tag的参数说明
ios开发UI篇—在ImageView中添加按钮以及Tag的参数说明 一.tag参数 一个视图通常都只有一个父视图,多个子视图,在开发中可以通过使用子视图的tag来取出对应的子视图.方法为Viewwi ...
- SM30维护视图添加按钮
转自http://blog.csdn.net/tsj19881202/article/details/7517232 遇到某需求,要求维护sm30的视图时,能加上排序按钮. 基本参考: http:// ...
随机推荐
- Compilation failed: this version of PCRE is not compiled with PCRE_UTF8 support at offset 0
在安装pcre-8.13.tar.gz时候出了错,说是缺少libpcre.so.0 下面是解决方法.真不容易哦,一个问题来没解决,新问题就出来了.一环扣一环,会搞死去.. errorgrep: err ...
- 【Spring 2】spring的属性注入形式
一.注入简介 spring是一个java bean的容器,它摒弃了过去通过new关键字调用类再调用类的实例的形式,通过依赖注入维护者一系列的java bean的示例.通过spring所提供的依赖注入 ...
- 用代码打开FORM里面用到的数据源
修改动态报表的时候,尝尝需要根据当前设计里指定的数据源,然后打开AOT去查找,相当的不方便. 于是产生写了一个方法,可以根据传过来的数据源名,去AOT找到TABLE或者VIEW, 直接打开,以便修改. ...
- HTTP Status 500 - javax.servlet.ServletException
运行某个jsp页面时提示 type Exception report message javax.servlet.ServletException: java.lang.NoClassDefFound ...
- WP8_给图片、按钮设置自定义图片
工程目录下新建文件夹Images,将图片文件复制到Images文件夹里,本文以image1为例 1).在xaml里加背景图片 image图片: <Stretch="Fill" ...
- PDM文件编辑
需要把Oracle中的表,导出到已有的PDM文件中. 1.Oracle导出表脚本 1) 2) 3) 2.PowerDesigner导入脚本 1) 2) 3) 4)
- 002vim常用命令
1.命令行模式:刚进入vim时的模式,该模式下可以移动光标进行浏览,可以进行整行删除等操作,但无法编辑文字,该模式下的功能键有: (1)yy:复制当前光标所在行 (2)[n]yy:n为数字,复制当前光 ...
- backBarButtonItem 颜色/文字修改
iOS7之后. 默认的返回按钮字体颜色是蓝色的, 显示内如是父VC(上一级界面)的title 如果要做修改, 可以通过下面的办法: 1. 修改字体颜色 (1) 在plist里面, 加上View con ...
- 使用TypeScript如何提升JavaScript编程效果?
TypeScript是个什么鬼?和JavaScript有什么关系? TypeScript是由微软开发的一种可快速入门的开源的编程语言,是JavaScript的一个超集,且向这个语言添加了可选的静态类型 ...
- Ajax清除浏览器js、css、图片缓存的方法
做东东时都是把图片在服务器的地址存放在数据库里面,然后到浏览器中显示,但是后来发现了两个问题. 第一:为了安全起见,js是无法读取本地的图片的,不然你写一个js,岂不是可以获取任何人电脑里面的文件了. ...