Extjs2.0 desktop 动态创建桌面图标和开始菜单
这几天一直纠结Extjs desktop怎么动态读取数据,用Ext.net已经实现但是不灵活。Ext.net做出来的桌面在窗口关闭后只是隐藏该窗口,并没有释放,对于我这种js菜鸟来说,改那一坨代码要人命啊。本来想用extjs4.2做桌面,不过下载下来发现在IE8下有个bug,一时也不知道该如何解决,于是还是用2.0吧。。。。。
经过网上搜索,找到了一篇不错的文章http://cat-rat.iteye.com/blog/1462567。
这篇文章详细的解释了如何动态实现,不过文章里面用的是测试数据,当我换成用ajax请求返回json数据时遇到了问题。
用一贯alert()的手段,测出来了extjs先执行了sample.js这个文件里面的内容最后才执行ajax。
于是在deskop.html这个页面里我是这样写的
Ext.Ajax.request({
url: 'AjaxRequest/GetWindow.aspx',
params: {},
success: function(resp, opts) {
var data = Ext.util.JSON.decode(resp.responseText);//返回的json字符串经过解析成json数据
var menuData = Ext.data.Record.create([
{ name: 'text' },
{ name: 'url' },
{ name: 'filterUrl' },
{ name: 'leaf' },
{ name: 'menuId' },
{ name: 'appId' },
{ name: 'children' }
]);
var myReader = new Ext.data.JsonReader({}, menuData);
var store = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(data),
reader: myReader
});
//在这个地方将sample.js内的代码拷贝过来
},
failure: function(resp, opts) {
Ext.Msg.alert('警告', "请求的页面不存在,请联系管理员");
}
});
先用ajax请求,请求成功之后再开始执行samp.js的内容:
AjaxRequest/GetWindow.aspx这个页面的代码:
//按照这种格式输出json字符串
string s = @"[ { 'text': '测试', 'url': 'null', 'filterUrl': '', 'leaf': false, 'menuId': '100489',
'appId': 0, 'children': [{ 'text': '程序组定义', 'url': '../Default.aspx', 'filterUrl': 'null', 'leaf': true, 'menuId': '100531', 'appId': 0}]}
,{ 'text': '测试', 'url': 'null', 'filterUrl': '', 'leaf': false, 'menuId': '100489',
'appId': 0, 'children': [{ 'text': '程序组定义', 'url': '../Default.aspx', 'filterUrl': 'null', 'leaf': true, 'menuId': '100531', 'appId': 0}]}
]";
Response.Write(s);
Response.End();
如图:
然后增加了桌面右键菜单:
在desktop.js中增加如下代码即能实现
this.closeWindows = function() {
windows.each(function(win) {
win.close();
},
this);
}
this.minimizeWindows = function() {
windows.each(function(win) {
if (win.minimizable) {
minimizeWin(win);
}
},
this);
}
this.contextMenu = new Ext.menu.Menu({
items: [{
text: '关闭所有',
handler: this.closeWindows,
scope: this
},
'-', {
text: '全部最小化',
handler: this.minimizeWindows,
scope: this
},
'-', {
text: '刷新页',
handler: function() {
window.location.href = window.location.href;
},
scope: this
},
'-', {
text: '系统设置',
// handler: this.ShowWallpaper_Win,
handler: function() {
var win = Ext.get("0000000001");
if (!win) {
win = new Ext.Window({
id: '0000000001',
//contentEl: "win", //重新生成窗体时,不可重复定义
maximizable: true,
closeAction: 'close',
minimizable: false,
iconCls: 'bogus',
width: 700,
height: 450,
title: "系统设置",
modal: false,
contentEl: Ext.DomHelper.append(document.body, {
tag: 'iframe',
style: "border 0px none;scrollbar:true",
src: '../UserSet/UserSet.aspx',
allowtransparency: true,
frameborder: 0,
height: "100%",
width: "100%"
})
});
win.show();
}
},
scope: this
}]
});
desktopEl.on('contextmenu',
function(e) {
e.stopEvent();
this.contextMenu.showAt(e.getXY());
},
this);
做完之后客户需要对桌面图标的大小、桌面图标下文字颜色、背景图片等进行改变,我又用jquery实现了这些功能。
网上搜索有人是这样http://blog.csdn.net/junmoxie/article/details/8021987实现动态读取url弹出窗口的,本人用这种iframe试过发现有些bug,具体怎么回事不太清楚,不过找到了解决办法。
//原来是这样写的
createMyWindow: function (win_data) { var desktop = this.app.getDesktop(); var win = desktop.getWindow(win_data.id); if (!win) { win = desktop.createWindow({ id: win_data.id, title: win_data.title, width: 640, height: 480, html: '<iframe style="position:relative;background-color:transparent;" allowtransparency="true" width="100%" height="100%" frameborder="0" src="' + win_data.url + '"></iframe>', iconCls: 'bogus', animCollapse: false, constrainHeader: true }); } win.show(); return win; },
//将html: html: '<iframe style="position:relative;background-color:transparent;" allowtransparency="true" width="100%" height="100%" frameborder="0" src="' + win_data.url + '"></iframe>',
改成: contentEl: Ext.DomHelper.append(document.body, {
tag: 'iframe',
style: "border 0px none;scrollbar:true",
src: '../UserSet/UserSet.aspx',
allowtransparency: true,
frameborder: 0,
height: "100%",
width: "100%"
})
这样那个bug就没了,不知道为什么。不过经过IE自带的调试工具发现,如果直接用没改动的那段代码创建的窗口,在关闭后还会请求原来的页面,过一会就报"没有权限"错误,如果关了之后立马打开不会有问题,就是只关不开后就报错。将代码改动后这个bug就没了。
↓↓↓扫描下面的二维码,关注我的公众号

Extjs2.0 desktop 动态创建桌面图标和开始菜单的更多相关文章
- wpf 全局异常捕捉+错误日志记录+自动创建桌面图标
/// /// 创建桌面图标 /// public static void CreateShortcutOnDesktop(string LnkName) { String shortcutPath ...
- robot创建桌面图标(转载)
桌面ride图标,安装之后会自动创建(偶尔也会创建失败),创建桌面图标方法如下: 1. 新建快捷方式 在桌面右击鼠标,弹出的菜单选择 新建-快捷方式 ,然后在"请键入对象"的位置输 ...
- 空闲时间研究一个小功能:winform桌面程序如何实现动态更换桌面图标
今天休息在家,由于天气热再加上疫情原因,就在家里呆着,空闲时想着,在很早以前(约3年前),产品人员跟我提了一个需求,那就是winform桌面程序的图标能否根据节日动态更换,这种需求在移动APP上还是比 ...
- 在fedora20下面手动为自己的安装程序创建桌面图标
(博客园-番茄酱原创) 在/usr/share/applications/下面创建destktop文件,用于产生桌面图标 创建文件:touch android-eclipse.desktop 编辑文件 ...
- 【MFC】动态创建CMFCToolbar图标不显示问题
最近遇到一个问题,需要动态的从xml文件读取一系列图标文件,加载到一个toolbar中,由于使用的是vs2008 with sp1 feature pack,自然想到用CMFCToolbar来做,思路 ...
- LINUX下给软件创建桌面图标
转自:http://www.cnblogs.com/Rapheal/p/3610411.html?utm_source=tuicool&utm_medium=referral 最近在折腾lin ...
- Android 动态更换桌面图标
每当双 11.12 来临之际,Android 手机 Launcher 中的淘宝.天猫图标就会变成双 11.12 主题的图标.实现了动态切换图标.名称 MainActivity package com. ...
- Ubuntu创建桌面图标
以火狐为例 创建"~/.local/share/applications/firefox_dev.desktop"文件, 文件内容为: [Desktop Entry] Name=F ...
- deepin ubuntu等创建桌面快捷方式
Linux网上下载软件一般只会有.sh结尾执行程序.并不会像商店下载一样自动创建桌面图标.此时需要自行进行编辑. #创建一个桌面图标后缀名为.desktop touch myDesktop.deskt ...
随机推荐
- 使用Visual Studio Code和typescript 开发调试React Native项目
关于React Native的详细介绍我就不叙述了,他是使用js构建原声app的开发框架.一次变异多平台运行,非常强大.但是个人不喜欢js的过于灵活(弱类型)的语法.强大的强类型语言Typescrip ...
- 【Maven】构建war包时排除web.xml
在使用maven构建项目的war包时,有时并不需要src/webapp/WEB-INF/下的一些文件. 这时可以通过maven-war-plugin创建配置来排除这些文件.下面贴出我平时使用的pom. ...
- oracle中如何移动数据文件
a.shutdown immediate关闭数据库 b.在os下拷贝数据文件到新的地点 c.Startup mount 启动到mount下 d.Alter database rename fil ...
- 初入angular4——实际项目搭建总结
前言 接到一个pc端后台项目,还会加入两个安卓同事一起学习和做这个项目,需要带一下他们. 既ng1之后,我就没怎么有过其它后台框架的实际项目经验了,期间用的移动端框架也并非vue.angular系列. ...
- android TranslateAnimation 顶部segment分段移动动画
这里实现的功能是从主页布局的fragment点击跳转到一个acitivity,然后顶部是一个切换的segment顶部是一个listview,点击segment分段让listview加载不同的内容.我这 ...
- spring事务失效情况分析
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt113 <!--[if !supportLists]-->一.&l ...
- UCOSii项目在NIOSii上的移植
概览 本次使用Altera公司的NIOS II软核. 使用Quatus工具生成BSP并利用BSP打包工具生成UCOSII嵌入环境. 手动书写LCD驱动与显示函数,对UCOS II加入简单图像显示接口. ...
- 从Object和Function说说JS的原型链
ECMAScript规定了两个特殊的内置对象:Object和Function.他们的特殊性在于,他们本身既是对象又是函数,而他们同时也是对象和函数的构造器.这种自己生自己的逻辑显然违反人性,如果还停留 ...
- 字符编码笔记:ASCII,Unicode和UTF-8(转)
字符编码笔记:ASCII,Unicode和UTF-8 作者: 阮一峰 日期: 2007年10月28日 今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个 ...
- Java学习5——标识符和关键字
标识符: 1.Java对各种变量.方法和类等要素命名时使用的字符串序列称为标识符.凡是自己可以起名字的地方都叫标识符,都要遵守标识符的规则. 2.Java标识符命名规则: 标识符由字母.下划线&quo ...