在desktop\js目录中包含了5个js文件,这5个js文件如下:

还有css样式表:desktop.css,图片素材

在这5个js文件中封装了用于模拟桌面的类,这些类如下:

Ext.ux.StartMenu(StartMenu.js) 模拟操作系统桌面左下方的开始菜单
Ext.ux.TaskBar(TaskBar.js) 模拟操作系统桌面右下方的任务栏     
   
Ext.Desktop(Desktop.js) 模拟操作系统的整个桌面
Ext.app.Module(Module.js)对应整个应用程序中的各个功能模块
Ext.app.App(App.js)对应整个应用程序

由于这些类并不包含在ExtJS的核心组件中,因此,在使用这些类之前,要先引用这些js文件以及相应的css文件,代码如下:

  1. <script type="text/javascript" src="js/StartMenu.js"></script>
  2. <script type="text/javascript" src="js/TaskBar.js"></script>
  3. <script type="text/javascript" src="js/Desktop.js"></script>
  4. <script type="text/javascript" src="js/App.js"></script>
  5. <script type="text/javascript" src="js/Module.js"></script>
  6. <script type="text/javascript" src="sample.js"></script>

其中desktop.css模拟桌面所需的样式文件,在samples.js文件中利用上面5个类实现了如图所示的桌面。

使用桌面组件的第1步是创建Ext.app.App对象,代码如下:

  1. //桌面组件配置
  2. MyDesktop = new Ext.app.App({
  3. //初始化
  4. init :function(){
  5. Ext.QuickTips.init();
  6. },
  7. //创建功能模块
  8. getModules : function(){
  9. return [
  10. new MyDesktop.GridWindow(),
  11. new MyDesktop.TabWindow(),
  12. new MyDesktop.AccordionWindow(),
  13. new MyDesktop.BogusMenuModule(),
  14. new MyDesktop.BogusModule()
  15. ];
  16. },
  17. //配置开始菜单
  18. getStartConfig : function(){
  19. return {
  20. title: '我的系统',
  21. iconCls: 'user',
  22. toolItems: [{
  23. text:'设置',
  24. iconCls:'settings',
  25. scope:this
  26. },'-',{
  27. text:'注销',
  28. iconCls:'logout',
  29. scope:this
  30. }]
  31. };
  32. }
  33. });

与创建大多数ExtJS组件不同,在创建Ext.app.App对象时,并不需要在Ext.onReady方法中指定页面加载完后执行的初始化桌面的方法,ExtJS会在页面加载完成后,自动调用Ext.app.App的init方法对模拟的桌面进行初始化。
在init方法执行后,ExtJS会自动调用getModules和getStartConfig方法对整个应用程序进行配置。getModules方法返回了一个包含多个Ext.app.Module对象的数组。每一个Module对象代表应用中的一个功能模块,这些功能模块都以弹窗的形式出现在桌面上。可以使用模拟桌面的开始菜单的Ext.ux.StartMenu展开这些功能模块的窗口。
对于已经展开的窗口,也可以通过模拟桌面下方的任务栏的Ext.ux.TaskBar控制某个窗口的显示或隐藏。
Ext.app.App中的startConfig()函数主要是用来配置开始菜单的选项。例子中配置了两个按钮,名称分别为"设置","注销",可以像对待普通菜单项一样配置,设置对应的标题,图标等参数。也可以设置handler在用户点击时执行对应的操作。

  1. /*
  2. * 创建一个名为MyDesktop.GridWindow的功能模块,并在Ext.app.App的getModules()函数中对其执行了初始化操作。
  3. */
  4. MyDesktop.GridWindow = Ext.extend(Ext.app.Module, {
  5. id:'grid-win',
  6. //初始化
  7. init : function(){
  8. this.launcher = {
  9. text: 'Grid Window',
  10. iconCls:'accordion',
  11. handler : this.createWindow,
  12. scope: this
  13. }
  14. },
  15. createWindow : function(){
  16. var desktop = this.app.getDesktop();
  17. var win = desktop.getWindow('grid-win');
  18. if(!win){
  19. win = desktop.createWindow({
  20. id: 'grid-win',
  21. title:'Grid Window',
  22. width:740,
  23. height:480,
  24. iconCls: 'icon-grid',
  25. shim:false,
  26. animCollapse:false,
  27. constrainHeader:true
  28. });
  29. }
  30. win.show();
  31. }
  32. });

在为Ext.app.App创建功能模块时,都要集成Ext提供的Ext.app.Module,这个类中只定义一个init()函数,需要重写这个函数来实现我们的功能。
一般只需要在init()函数中定义一个launcher对象,他是一个JSON对象,内部包含了启动这个功能模块所需要的一些配置。当在Ext.ux.StartMenu中点击对应的功能模块时,就会执行launcher中定义的handler属性,弹出这个功能模块对应的窗口。
例子中的handler属性对应着自身的createWindow()函数。在这个回调函数中,我们先通过this.app.getDesktop()获得整个应用对应的模拟桌面,然后使用desktop.getWindow('grid-win')判断功能模块对应的窗口是否已经存在,如果窗口还没有创建,就调用desktop.createWindow()创建这个窗口,,并显示出来。
除了使用Ext.ux.StartMenu显示功能窗口之外,我们还可以使用桌面的快捷方式启动对应的功能模块,点击模拟桌面上放置的图标或链接,就可以让对应的功能窗口直接显示出来。

  1. MyDesktop.TabWindow = Ext.extend(Ext.app.Module, {
  2. id:'tab-win',
  3. init : function(){
  4. this.launcher = {
  5. text: 'Tab Window',
  6. iconCls:'tabs',
  7. handler : this.createWindow,
  8. scope: this
  9. }
  10. },
  11. createWindow : function(){
  12. var desktop = this.app.getDesktop();
  13. var win = desktop.getWindow('tab-win');
  14. if(!win){
  15. win = desktop.createWindow({
  16. id: 'tab-win',
  17. title:'Tab Window',
  18. width:740,
  19. height:480,
  20. html:'Tab Window',
  21. iconCls: 'tabs',
  22. shim:false,
  23. animCollapse:false,
  24. border:false,
  25. constrainHeader:true
  26. });
  27. }
  28. win.show();
  29. }
  30. });

Ext.Desktop中将快捷方式称为shortcut,我们不需要写任何代码来配置快捷方式,只需要在为标签和对象命名时遵守一定的规则即可。
在模拟桌面上显示的快捷方式时所使用的HTML标签如下:

  1. <dl id="x-shortcuts">
  2. <dt id="grid-win-shortcut">
  3. <a href="#"><img src="data:images/s.gif" />
  4. <div>Grid Window</div></a>
  5. </dt>
  6. </dl>

模拟快捷方式都必须包含在id = 'x-shortcuts'的dl标签中,dl标签中包含每个dt标签都将成为一个快捷方式。这些dt标签属性都以-shortcut结尾,将id属性中的-shortcut部分去掉后,得到的就是功能模块的id。

转载自:http://blog.csdn.net/sjf0115/article/details/9346727

ExtJs桌面组件(DeskTop)的更多相关文章

  1. Google Map和桌面组件 Android开发教程

    本文节选于机械工业出版社推出的<Android应用开发揭秘>一 书,作者为杨丰盛.本书内容全面,详细讲解了Android框架.Android组件.用户界面开发.游戏开发.数据存储.多媒体开 ...

  2. Android之桌面组件AppWidget

    转载:Android之桌面组件App Widget初探 Android开发应用除了程序应用,还有App Widget应用.好多人会开发程序应用而不会开发App Widget应用.本帖子就是帮助大家学习 ...

  3. blfs(systemd版本)学习笔记-编译安装gnome桌面组件及应用

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! blfs中的gnome项目地址:http://www.linuxfromscratch.org/blfs/view/stable ...

  4. Javascript - ExtJs - GridPanel组件

    GridPanel组件(Ext.grid.GridPanel)logogram:Ext.grid.Panel | xtype:gridpanel 此类派生自Ext.Panel,创建表格需要两个必须的对 ...

  5. 实用ExtJS教程100例-008:使用iframe填充ExtJS Window组件

    上面两节中我们分别演示了ExtJS Window的常用功能 和 如何最小化ExtJS Window组件,在这篇内容中我们来演示一下如何使用iframe填充window组件. 思路很简单,首先创建一个w ...

  6. Extjs window组件 拖动统制

    Extjs window组件 拖动控制有时候一拖就拖出了浏览器,在想拖回来就不好办了: 解决办法:参考以下代码,在加载Ext核心库以后执行: Ext.override(Ext.Window, {    ...

  7. Extjs获得组件值的方式

     Extjs中找Form,Extjs找组件的方式: 1,Extjs.getCmp 2,通过组件之间的关系,up,down 结论: 1,form.getValues()和form.getForm().g ...

  8. ExtJS关于组件Component生命周期

    extjs组件生命周期大体分为3个阶段:初始化.渲染.销毁. 第一阶段:初始化 初始化工作开始于组件的诞生,所有必须的配置设定.事件注册.预渲染处理等都在此时进行. 1.应用组件的配置: 当初始化一个 ...

  9. Win7 远程 Ubuntu 桌面 mate desktop,并实现中文输入法

    一. 安装mate desktop: $sudo apt-add-repository ppa:ubuntu-mate-dev/ppa $sudo apt-add-repository ppa:ubu ...

随机推荐

  1. MongoDB 3: 使用中的问题,及其应用场景

    导读:用MongoDB去存储非关系型的数据,是一个比较正确的选择.但是,如果只是用MongoDB,那么也会出现一些问题.MongoDB,尤其使用的最佳场景,更多的时候,需要结合关系型数据库共同解决问题 ...

  2. python 多行匹配

    content = ''' abcdefg hijklmn opq rst uvw xyz ''' r = re.compile('\S+cde\S+|\S+klm\S+|^xyz$', re.MUL ...

  3. zz

    婚恋新现象 杭州男为何更愿意娶外地女孩?-浙江新闻-浙江在线 剩男三无

  4. 【MySQL】触发器学习

    MySQL手册中对触发器的定义是: 触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象.表必须是永久性表,不能将触发程序与临时表与视图关联起来. 相同触发程序动作时间和事件的给定表 ...

  5. Python之路【第七篇】:线程、进程和协程

    Python之路[第七篇]:线程.进程和协程   Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

  6. 使用Spring开发第一个HelloWorld应用

    http://www.importnew.com/13246.html 让我们用Spring来写第一个应用程序吧. 完成这一章要求: 熟悉Java语言 设置好Spring的环境 熟悉简单的Eclips ...

  7. RocketMQ学习记录

    RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: 1.能够保证严格的消息顺序 2.提供丰富的消息拉取模式 3.高效的订阅者水平扩展能力 4.实时的消息订阅机制 5.亿级消息堆积能力 ...

  8. CSS文件中第一行@charset "utf-8";的作用

    使用UTF-8编码唯一的好处是,国外的用户如果使用Windows XP英文版,浏览UTF-8编码的任何网页,无论是中文.还是日文.韩文.阿拉伯文,都可以正常显示,UTF-8是世界通用的语言编码,而如果 ...

  9. Pass Dynamic Value to a Grid Label

     A grid label is the blue (normally) colored grid header that you see on PeopleSoft pages. The grid ...

  10. 《第一行代码--Android》阅读笔记之广播

    广播接收器 1.注册方式 动态注册:在程序中注册,如在Activity里的onCreate()方法中注册 静态注册:在AndroidManifest.xml中注册   2.可接收哪些广播 接收系统消息 ...