EXT.NET复杂布局(四)——系统首页设计(下)
此篇为EXT.NET系列终结篇。希望此系列能够对大家有所帮助。
首页JS函数介绍
使然使用了Ext.NET,但是JavaScript的地位还是举足轻重的。
1.添加选项卡
1: var addTab = function (id, url, title) {
2: var tab = tplCenter.getComponent(id);
3: if (!tab) {
4: tab = tplCenter.add({
5: id: id,
6: title: title,
7: closable: true,
8: autoLoad: {
9: showMask: true,
10: url: url,
11: mode: "iframe",
12: maskMsg: "正在加载 " + title + " ..."
13: }
14: });
15: }
16: tplCenter.setActiveTab(tab);
17: }
注意maskMsg,它有以下效果:
2.显示消息
1: function showMsg(title, content) {
2: Ext.net.Notification.show({
3: hideFx: {
4: fxName: 'switchOff',
5: args: [{}]
6: },
7: showFx: {
8: args: [
9: 'C3DAF9',
10: 1,
11: {
12: duration: 2.0
13: }
14: ],
15: fxName: 'frame'
16: },
17: closeVisible: true,
18: html: content,
19: title: title + ' ' + new Date().format('g:i:s A')
20: });
21: }
3.弹出窗口
1: function showMyWindow(url, id, title, isMaximized) {
2: url += ((url.indexOf('?') == -1 ? ("?rand=") : ("&rand=")) + Math.round(Math.random() * 10000));
3: var myWin = new Ext.Window({
4: id: id,
5: title: title,
6: width: 572,
7: height: 290,
8: iconCls: "addicon",
9: resizable: false,
10: draggable: true,
11: defaultType: "textfield",
12: labelWidth: 100,
13: collapsible: false,
14: closeAction: 'close',
15: closable: true,
16: maximizable: true,
17: maximized: arguments.length == 4 ? isMaximized : false,
18: modal: true,
19: buttonAlign: "center",
20: bodyStyle: "padding:0 0 0 0",
21: listeners: { "beforedestroy": function (obj) {
22: var tabs = top.tabs;
23: if (typeof tabs != undefined && tabs != null) {
24: if (top.tabs.items.getCount() > 1) {
25: var currentTab = tabs.getActiveTab();
26: tabs.remove(currentTab);
27: }
28: }
29: top.showMsg('温馨提示', '我已经关闭啦!');
30: }
31: },
32: html: '<iframe alt" >33: 'border-style:solid;border-color:red;" width="100%" height="100%" ' +
34: ' id="frmWin' + id + '" src="' + url + '" name="' + id + '" />'
35: });
36: myWin.show();
37: }
注意beforedestroy事件,这个事件可以在窗口关闭后通知你,有了这个通知事件,想干啥都方便了。在示例中,本人是显示消息。
页面布局
从图中可以看出分为上、中、左、右四块,前面介绍过了,就不细说了。
之所以使用Viewport,主要是为了自适应浏览器。值得注意的是,将一个页面分割几块,通常使用BorderLayout,其下有North、West、Center、East、South五个元素,其Collapsible属性指示是否隐藏面板,比如本示例的East面板。West这里放置左侧菜单,支持无限子集。为了有折叠面板的效果,需要设置Layout="AccordionLayout"。然后在后台动态添加TreePanel。
值得注意的是Center面板:
<Center MarginsSummary="5 5 5 0"><ext:TabPanel runat="server" ID="tplCenter" IDMode="Static" ResizeTabs="true" Border="true"MinTabWidth="75" TabWidth="135" EnableTabScroll="true"><Plugins><ext:TabScrollerMenu ID="TabScrollerMenu1" runat="server" /></Plugins><Items><ext:Panel ID="Panel1" runat="server" TabMenuHidden="true" Title="工作台" TabTip="工作台"Closable="false"><AutoLoad Url="/WorkbenchMain.aspx" Mode="IFrame" TriggerEvent="show" ShowMask="true" /></ext:Panel></Items></ext:TabPanel></Center>
可以看出Center面板中放置了选项卡面板(TabPanel),主要到Plugins元素中的TabScrollerMenu控件,作用如图:
至于Panel,能让其自动加载框架页。TriggerEvent="show" 表示显示的时候加载。
可以看出,工作台那块都在Url="/WorkbenchMain.aspx" 设置。注意/表示网站根目录,只有发布到IIS或者Web应用程序有效。
工作台
工作台是非常重要的一块。
有时候为了显示重要信息,可能需要以不同颜色显示,那么注意下面的JS:
var template = '<b >{0}</b>'; var setTitle = function (value, metadata, record, rowIndex, colIndex, store) {return String.format(template, value, 'green'); };
在上面的代码中,你可以根据值来判断显示什么样的HTML,这里是粗体加绿。
自适应区域:
function autoSizeArea() {var vHeight = Viewport1.getHeight();pnlView.setHeight(vHeight);vHeight = vHeight - 150;GridPanel1.setHeight(vHeight);GridPanel3.setHeight(vHeight);GridPanel2.setHeight(vHeight);GridPanel6.setHeight(vHeight);GridPanel5.setHeight(vHeight);}
弹出窗体:
function showTestPage() {top.showMyWindow('/Test.aspx', 'frmStatesRequestList', '测a试?页3', true);}
这里显示的是我的测试页,你可以在这里显示自定义页面,并且可以传递工作台中面板中的Json数据。
在这里,我在工作台也添加了一个弹出窗口的JS函数,这么做的原因是,从这里打开窗口处理完事项,我可以刷新工作台的数据,甚至是指定的面板的数据,也就是在beforedestroy事件中,reload相应的store。
在工作台,本人写了一些处理的JS,大家可以根据自己需要更改,并且剪切到独立的JS文件中去。
比如这个函数:
1:function showInput(animEl, recodes, TypeID, iconCs, msg, progressText, taskIDName, ObjectIdName, DriverIdName, TaskTitelName) {
2: Ext.MessageBox.show({
3: title: '批注',
4: msg: '请输入批注:',
5: width: 300,
6: buttons: Ext.MessageBox.OKCANCEL,
7: multiline: true,
8: fn: function (btn, text) {
9: var remark = text.replace(/(^\s*)|(\s*$)/g, '');
10: if (TypeID == 'Reject' || TypeID == 'Repeal') {
11: var tip = '';
12: if (TypeID == 'Reject')
13: tip = '【退回】';
14: if (TypeID == 'Repeal')
15: tip = '【撤销】';
16: if (remark == '' && btn == 'ok') {
17: showInput(animEl, recodes, TypeID, iconCs, msg, progressText, taskIDName, ObjectIdName, DriverIdName, TaskTitelName);
18: alert(tip + '必须填写批注,请填写。');
19: }
20: else if (btn == 'cancel')
21: Ext.MessageBox.alert('温馨提示', '操作已取消(' + tip + '必须填写批注)。');
22: else if (remark != '' && btn == 'ok')
23: Operations(animEl, recodes, TypeID, iconCs, msg, progressText, taskIDName, ObjectIdName, DriverIdName, TaskTitelName, remark);
24: }
25: else {
26: if (btn == 'ok')
27: Operations(animEl, recodes, TypeID, iconCs, msg, progressText, taskIDName, ObjectIdName, DriverIdName, TaskTitelName, remark);
28: else
29: Ext.MessageBox.alert('温馨提示', '操作已取消。');
30: }
31: },
32: animEl: animEl
33: });
34: }
用来判断相应的操作类型,假如是退回或者撤销,则必须填写批注。如:
至于其他的代码,我就不多介绍了,篇幅有限,精力有限。
工作台的代码,其他篇幅有部分介绍,可以参考EXT.NET复杂布局(一)——工作台。
处理面板顶部工具栏有不少按钮,如何动态添加这些按钮(可以根据用户权限和事项判断),代码如下:
1: /// <summary>
2: /// 向工具条添加按钮
3: /// </summary>
4: /// <param name="icon">图标</param>
5: /// <param name="text">文本</param>
6: /// <param name="facode">操作Code</param>
7: /// <param name="toolbar">工具条</param>
8: /// <param name="_panelName">容器ID</param>
9: private static void SetButton(Icon icon, string text, FACodeEnum facode, Toolbar toolbar, string _panelName)
10: {
11: if (toolbar == null) throw new ArgumentNullException("toolbar");
12: var _btn = new Ext.Net.Button
13: {
14: Icon = icon,
15: Text = text,
16: Listeners =
17: {
18: Click =
19: {
20: Handler =
21: string.Format("toExcuteOperations(#{{{0}}}.getSelectionModel().getSelections(),'{1}');", _panelName, facode.ToString())
22: }
23: }
24: };
25: //设置Click事件的Handler,用于操作所选项。操作参数(所选记录集、操作Code)
26: if (toolbar.Items.Count > 0)
27: toolbar.Items.Add(new ToolbarSeparator());
28: toolbar.Items.Add(_btn);
29: }
ToolbarSeparator表示分割线,比如:
在String.Format中,两个大括号代表一个大括号哦。
表单
还记得那个测试页么,在工作台弹出窗口后,窗口加载的是框架页,那么在这个框架页中,我们如何关闭这个窗口呢?比如提交数据完毕的时候。其实只需要输出这段脚本即可:
top.Ext.getCmp('frmStatesRequestList').destroy();
在这个框架页中,我们也可以调用首页消息函数,比如:
top.showMsg('温馨提示', '欢迎进入该页面!');
关于表单的一些介绍,请看EXT.NET复杂布局(三)——复杂表单布局。
尾声
从使用EXT.NET到现在,也差不多一年了,真正使用的时间也只有几个月而已。现在回想起来,还是感慨良多。
回想当初上手的时候,不仅ext不熟悉,而且对EXT.NET也一无所知,中间碰到过许多问题,但是挺过来了,而且还留下了自己的足迹。希望我的帖子能够帮助各位更快的掌握EXT以及EXT.NET,也希望能为EXT.NET的资料库添加块砖片瓦。
最后,附上源码。
转载于:https://www.cnblogs.com/Areas/archive/2012/03/26/2417834.html
EXT.NET复杂布局(四)——系统首页设计(下)相关推荐
- EXT.NET复杂布局(四)——系统首页设计(上)
很久没有发帖了,很是惭愧,因此给各位使用EXT.NET的朋友献上一份礼物. 本篇主要讲述页面设计与效果,下篇将讲述编码并提供源码下载. 系统首页设计往往是个难点,因为往往要考虑以下因素: 重要通知 系 ...
- 基于Java的网上手机销售系统的设计与实现(附:源码 论文 sql文件 部署视频)
摘要 本文所讲述的是网上手机销售系统的设计与实现. 本系统实现了会员注册.登录.资料修改,浏览和检索商品.发布留言.看公告,管理员具有修改个人密码.添加手机品牌.增加手机信息.管理会员信息.管理订单信 ...
- 基于springboot在线图书销售系统的设计与实现.docx
随着图书行业的发展,图书的营销模式以及供应方式也产生了不同的变化.图书商品需求量以及用户需求的改变,对于图书销售行业的经营以及图书企业的管理产生了不同的影响,导致很多数据信息在处理和维护时会非常困难, ...
- 网上订餐系统 mysql 数据库设计_网上订餐系统的设计与实现
摘要: 进入21世纪,伴随着我国的综合国力的迅速提升,科技的迅猛发展,网络信息化和电子商务已经渗透到了人类社会的各个方面与角落.网购再也不是新鲜的代名词,它已经成为我们寻常生活的一部分.人们在网上购买 ...
- Java、JSP手机销售系统的设计
技术:Java.JSP等 摘要: 本文讲述了基于B/S模式的手机在线销售系统的设计与实现.所谓的手机在线销售系统是通过网站推广互联企业的手机和技术服务,并使客户随时可以了解企业和企业的产品,为客户提供 ...
- Java、JSP网上商城系统的设计
技术:Java.JSP等 摘要: 1.1课题背景 全球网络销售的盛行,互联网的兴起已经完全改变了商品市场,当国内各大型互联网公司出现,就衍生出互联网产品的销售,并通过网络进行管理.随着全社会的进步,实 ...
- 网上商城系统的设计与实现毕业设计
技术:Java.JSP等 摘要: 1.1课题背景 全球网络销售的盛行,互联网的兴起已经完全改变了商品市场,当国内各大型互联网公司出现,就衍生出互联网产品的销售,并通过网络进行管理.随着全社会的进步,实 ...
- 基于Java的在线饮品销售系统的设计与实现
技术:Java.JSP等 摘要: 如今是互联网时代,消费者的习惯也在被潜移默化的改变.人们已经不能满足于传统的交易平台,更多的消费者选择快捷的方式,在网络上进行购物.在线饮品销售系统满足了喜欢喝饮品用 ...
- Thinkphp5 开发 OA 办公系统 - 数据库设计
2019独角兽企业重金招聘Python工程师标准>>> 自从接触到用PowerDesigner做数据库建模后,喜欢它就停不下来了.我发现现在很多2-20人的团队在做数据库结构设计时, ...
最新文章
- input type右对齐与只读的
- 在Linux下安装配置phpMyAdmin步骤
- SQL语言之组函数(Oracle)
- 湖南大学计算机系统原理实验,湖南大学-计算机组成原理实验-实验3-bomblab_图文.pdf...
- Istio 1.10 发布及官网改版
- aqlserver实用程序_sqlserver命令提示实用工具的介绍
- linux内存映射函数mmap
- Android内核开发:系统启动速度优化
- mysql循环遍历获取_mysql存储过程之循环遍历查询结果集
- *第十五周*数据结构实践项目一【验证哈希表及其算法】
- 五笔输入法的前世今生
- 数学分析(一)数列与数列极限
- JDBC--DAOUtil封装
- tplink路由器dns服务器未响应,联通光纤猫连接无线路由器设置教程图解
- invalid combination of type specifiers 解决方法
- 深度学习中 GPU 和显存分析
- 时间序列多步预测的一般方法
- mac系统+frida 简单测试真机or genymotion模拟器
- torch.nn、(二)
- 线性表之线性表与数组的区别
热门文章
- Nginx-Lua重定向系列
- R语言进阶 | 变量赋值背后的机制与R语言内存优化
- 不错的递归题:输入123,返回“321”。 要求必须用递归,不能用全局变量,输入必须是一个参数,必须返回字符串。
- 《剑指offer》数组中出现次数超过一半的数字
- Hive----------Cannot find hadoop installation: $HADOOP_HOME m...
- Spark transformation算子案例
- WPF中的路由事件(转)
- 【坐在马桶上看算法】算法4:队列——解密QQ号
- FLASK上传时有中文文件名的解决方案
- ThinkPHP 3.2.3 视图模型的使用