`
cats_tiger
  • 浏览: 276502 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

扩展Dojo 0.9之Resizable Dialog

    博客分类:
  • Ajax
阅读更多
虽然对dojo的诟病多多,但是我还是选择了Dojo,原因就是它的扩展性很好。我可以在它的基础之上编写高品质的js代码。Ext虽然cool毙,但是别说扩展,即使要修改它的css也是困难多多,再有就是它那480多k的js文件也让人头痛。dojo最新的0.9版本的体积比以前(150多k)小了很多(50k),作者还声称性能也大大提高了,考虑到以前在dojo上的投入,本人决定仍然使用dojo。
但是dojo0.9的向上兼容性很差,底层的API好像重写了。而且目录的结构也大为不同,唉,没办法谁让俺上了贼船了,改吧。
对于Dojo的widgets,用的最多的是Dialog和FilteringTable,新版的这两个widget弱化了很多,尤其是FilteringTable。今天就先修改Dialog。
dojo分为4个目录:
dojo-是dojo的底层API
dojox-扩展API,包括一些widget,比较有用的是FloatingPane。
dijit-提供了一些widget,新版的dialog就在这个目录下,除了一般的Dialog功能外,还提供了ToolTipDialog,效果还是很cool的。BTW,dojo的作者是一个美工盲,做的例子毫无吸引力,难怪粉丝们都跑到Ext那边了。但是,新版的Dialog缺少了一个最重要的功能:resizable,好吧,就给他加上这个功能,顺便美化美化。其实dojo0.9有ResizeHandle这个widget,位于dojox.layout下,同一个包中的FloatingPane.js演示了如何使用ResizeHandle,把Dialog和FloatingPane结合一下就搞定了。
首先在dojox目录下新建一个sam目录,作为扩展文件的目录。然后在Sam下新建一个Dialog.js文件:
js 代码
 
  1. if(!dojo._hasResource["dojox.sam.Dialog"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.  
  2. dojo._hasResource["dojox.sam.Dialog"] = true;  
  3. dojo.provide("dojox.sam.Dialog");  
  4.   
  5. dojo.require("dojo.dnd.move");  
  6. dojo.require("dojo.fx");  
  7.   
  8. dojo.require("dijit._Widget");  
  9. dojo.require("dijit._Templated");  
  10. dojo.require("dijit.Dialog");  
  11. dojo.require("dijit.layout.ContentPane");  
  12. dojo.require("dijit.form.Form");  
  13. dojo.require("dojox.layout.ResizeHandle");   
  14.   
  15. dojo.declare(  
  16.     "dojox.sam.DialogUnderlay",  
  17.     [dijit.DialogUnderlay],  
  18.     {  
  19.     }  
  20. );  
  21.       
  22. dojo.declare(  
  23.     "dojox.sam.Dialog",  
  24.     [dijit.Dialog, dijit._Templated, dijit.form._FormMixin],  
  25.     {  
  26.         // SAM: add resizeHandle node.  
  27.         templateString: null,  
  28.         templateString:"很长,看附件吧",  
  29.           
  30.       // resizable: Boolean  
  31.       // allow resizing of pane true/false  
  32.       //SAM:add resizable property  
  33.       resizable: false,  
  34.   
  35.       // resizeAxis: String  
  36.       //    x | xy | y to limit pane's sizing direction  
  37.       //SAM:add resizeAxis  
  38.       resizeAxis: "xy",  
  39.                   
  40.         postCreate: function(){  
  41.             dojox.sam.Dialog.superclass.postCreate.apply(this, arguments);  
  42.               
  43.             //SAM: Display resizeHandle or not  
  44.             if(!this.resizable){  
  45.               this.resizeHandle.style.display = "none";       
  46.           }  
  47.         },  
  48.         //SAM:override super's method, enable resize handle.  
  49.         startup: function(){      
  50.             dojox.sam.Dialog.superclass.startup.call(this);   
  51.               
  52.             if (this.resizable) {  
  53.                 this.containerNode.style.overflow = "auto";  
  54.                 var tmp = new dojox.layout.ResizeHandle({   
  55.                     //targetContainer: this.containerNode,   
  56.                     targetId: this.id,   
  57.                     resizeAxis: this.resizeAxis   
  58.                 },this.resizeHandle);  
  59.             }  
  60.     }  
  61. });  
  62. }  
这个Dialog.js继承了dijit.Dialog,所以只写了很少代码。
下面是美化,在dojox/sam下建resources/images目录,用于存放dialog的化妆品。打开ff的Dom查看器(或者看templateString),挨个找到所需的css的名字,然后自己建css,需要注意的是,dojo0.9中实现模式对话框的背景的css位于dijit/themes/dijit.css下,找了很久才找到。把这些css整合到一起,然后按着Ext的样子重写就OK了。
呵呵,现在的dojo修改样式实在是简单多了,0.4以前css是写在js文件中的,修改起来那叫一个费尽,还要提防它升级。
这样,我们就完成对Dialog的升级,效果可以看附件中的tests,记着把附件中的sam目录放到dojo的dojox目录下。
下一次要做一个独立的Widget——Paginator
分享到:
评论
6 楼 mybird 2008-07-14  
在1.1.1下无法运行
5 楼 鹤惊昆仑 2008-01-19  
楼主的扩展在0.9版本可以正常使用。但在1.0.0版本无法正常使用。我做了一点微小的修正,使之可以在1.0.0版本下自由伸缩(见附件)。感谢cats_tiger!
4 楼 hmjlq 2007-11-20  
你的代码有问题啊:
如果这样
var dd = new dojox.sam.Dialog();
dojo.style(dd.domNode, "width", "250px");
dojo.style(dd.domNode, "height", "250px");
//dojo.style(dd.resizeHandle, "display", "block");
//dd.domNode.style = "width:250px; height:250px;";
dd.show();
出来的dialog不能调整大小
3 楼 ado88 2007-09-15  
wangjj_0016:

我试验了一下没有问题,你一定是把路径搞错了,.要放到dojox文件夹下面
2 楼 cats_tiger 2007-08-29  
啥米问题?说清楚嘛。
1 楼 wangjj_0016 2007-08-28  
大哥,你的代码有问题啊

相关推荐

    dojo0.9

    以下是对"dojo0.9"的详细解析: 1. **Dojo 框架概述**: Dojo 框架是一套完整的前端开发工具集,包括 UI 控件、数据绑定、模块管理、动画效果、AJAX 支持、国际化和本地化等功能。它以其强大的功能和丰富的API闻名...

    dojo精品中文教程(包一)

    dojo0.9 使用心得 dojo学习笔记(一)-dojo.io.IO & dojo.io.BrowserIO) dojo学习笔记(三) dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane ...

    dojo-release dojo

    从0.9到1.4,Dojo不仅扩展了其功能范围,还在模块化、性能、易用性等方面做出了显著提升。对于开发者来说,了解这些版本的历史和特性,有助于更好地理解和使用Dojo,以及在项目中选择合适的版本。同时,这些不同版本...

    dojo精品中文教程(包二)

    dojo0.9 使用心得 dojo学习笔记(一)-dojo.io.IO & dojo.io.BrowserIO) dojo学习笔记(三) dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane ...

    dojo精品中文教程(全)

    dojo0.9 使用心得 dojo学习笔记(一)-dojo.io.IO & dojo.io.BrowserIO) dojo学习笔记(三) dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane ...

    dojo精品中文教程(包三)

    dojo0.9 使用心得 dojo学习笔记(一)-dojo.io.IO & dojo.io.BrowserIO) dojo学习笔记(三) dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane ...

    dojo dojo实例 dojo例子 dojo资料 dojo项目 dojo实战 dojo模块 dojo编程

    12. **dojo/NodeList**:Dojo对DOM NodeList进行了扩展,提供了链式调用和更多的DOM操作方法。 在实际项目中,开发者通常会结合这些知识点来构建复杂的Web应用程序。例如,使用`dojo/ready`确保页面加载完成后初始...

    精通Dojo by Dojo之父

    鉴于此,图灵公司引进了Dojo之父亲自撰写的《Mastering Dojo》一书。 本书对Dojo进行了全面而深入地阐述,包括基本使用和高级技巧。全书以一个能让读者迅速上手的简单示例开篇,进而读者们将了解到Dojo的核心,也...

    dojo文档 dojo文档 dojo文档

    dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档

    dojo中文文档-dojo手册

    Dojo的核心概念之一是模块系统(dojo/_base)。这个模块基础包含了Dojo的核心功能,如对象创建、函数绑定、事件处理等。通过使用dojo.require和dojo.provide,开发者可以实现代码的模块化,提高代码复用性和可维护性...

    Dojo教程

    常见的Dojo部件有dijit.form.Button(按钮)、dijit.layout.ContentPane(内容面板)和dijit.Dialog(对话框)等。 DojoInPractice_cn.pdf 可能是一本关于Dojo实战的中文教程,其中可能涵盖了如何在实际项目中运用...

    DOJO 学习笔记 dojo

    Dojo 是一个功能丰富的 JavaScript 库,它提供了一系列模块化、面向对象的工具,用于构建高性能的 Web 应用程序。在 Dojo 中,模块和包的概念是核心组成部分,它们帮助开发者组织和管理代码,使其更易于维护和重用。...

    DOJO中文手册【出自dojo中国】

    Dojo的包加载机制允许动态加载所需模块,为用户提供高度的灵活性来扩展和定制工具包。 在技术特性上,Dojo的文件结构包括一个核心代码文件(Dojo.js)和多个JavaScript文件,按照功能不同分为多个版本,如AJAX版、...

    dojo js dojo js

    dojo js dojo js dojo js dojo js dojo js dojo js dojo js

    dojo快速入门(中文版)

    通过`dojo.require()`,你可以方便地引入更多功能,扩展dojo的基础能力,如drag&drop、高级AJAX传输、字符串处理和强大的Data API等。 Dijit是dojo工具包中的一个项目,它提供了一系列封装和可重用的组件(widgets...

    dojo自定义对话框

    Dialog允许我们以模态或非模态方式显示信息,用户可以与之交互,然后进行确认、取消或其他操作。创建一个基本的Dojo Dialog首先需要引入Dojo的模块,包括`dijit/Dialog`和`dojo/parser`。在HTML文件中,我们可以这样...

    DOJO权威指南+DOJO1.1源码

    DojoX是DOJO的扩展库,包含了更专业和特定领域的功能,如图表绘制、GIS地图、数据网格等。这使得DOJO能够满足更多复杂应用场景的需求。 6. **DOJO 1.1源码分析** 分析DOJO 1.1的源码可以帮助我们理解其内部实现...

    DOjo中文使用手册

    Dojox是DOjo的一个扩展包,提供了许多有用的功能,如 CometD、图表、数据Grid等。Dojox可以帮助用户快速构建复杂的Web应用程序。 DOjo中文使用手册是一个非常详细和全面的使用手册,涵盖了DOjo的安装、使用、调试等...

    dojo工具包zip

    8. **DojoX扩展库**:除了核心Dojo工具包,还有Dojo eXtension(DojoX)项目,包含了各种扩展功能,如图表、Gantt图、GIS地图等。 9. **Dojo的AMD与CommonJS兼容**:虽然Dojo基于AMD,但它也兼容CommonJS规范,这...

    dojo1.8.3官方demo

    1. **dojo/_base**: 这是Dojo的基础模块,包含许多核心功能,如事件处理、类系统、对象扩展、异步操作等。 2. **dojo/dom**: 提供DOM(Document Object Model)操作,包括获取、设置DOM节点属性,创建和移除元素等...

Global site tag (gtag.js) - Google Analytics