虽然对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 代码
- if(!dojo._hasResource["dojox.sam.Dialog"]){
- dojo._hasResource["dojox.sam.Dialog"] = true;
- dojo.provide("dojox.sam.Dialog");
-
- dojo.require("dojo.dnd.move");
- dojo.require("dojo.fx");
-
- dojo.require("dijit._Widget");
- dojo.require("dijit._Templated");
- dojo.require("dijit.Dialog");
- dojo.require("dijit.layout.ContentPane");
- dojo.require("dijit.form.Form");
- dojo.require("dojox.layout.ResizeHandle");
-
- dojo.declare(
- "dojox.sam.DialogUnderlay",
- [dijit.DialogUnderlay],
- {
- }
- );
-
- dojo.declare(
- "dojox.sam.Dialog",
- [dijit.Dialog, dijit._Templated, dijit.form._FormMixin],
- {
-
- templateString: null,
- templateString:"很长,看附件吧",
-
-
-
-
- resizable: false,
-
-
-
-
- resizeAxis: "xy",
-
- postCreate: function(){
- dojox.sam.Dialog.superclass.postCreate.apply(this, arguments);
-
-
- if(!this.resizable){
- this.resizeHandle.style.display = "none";
- }
- },
-
- startup: function(){
- dojox.sam.Dialog.superclass.startup.call(this);
-
- if (this.resizable) {
- this.containerNode.style.overflow = "auto";
- var tmp = new dojox.layout.ResizeHandle({
-
- targetId: this.id,
- resizeAxis: this.resizeAxis
- },this.resizeHandle);
- }
- }
- });
- }
这个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
分享到:
- 2007-08-24 15:57
- 浏览 6077
- 评论(6)
- 论坛回复 / 浏览 (6 / 4881)
- 查看更多
相关推荐
以下是对"dojo0.9"的详细解析: 1. **Dojo 框架概述**: Dojo 框架是一套完整的前端开发工具集,包括 UI 控件、数据绑定、模块管理、动画效果、AJAX 支持、国际化和本地化等功能。它以其强大的功能和丰富的API闻名...
dojo0.9 使用心得 dojo学习笔记(一)-dojo.io.IO & dojo.io.BrowserIO) dojo学习笔记(三) dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane ...
从0.9到1.4,Dojo不仅扩展了其功能范围,还在模块化、性能、易用性等方面做出了显著提升。对于开发者来说,了解这些版本的历史和特性,有助于更好地理解和使用Dojo,以及在项目中选择合适的版本。同时,这些不同版本...
dojo0.9 使用心得 dojo学习笔记(一)-dojo.io.IO & dojo.io.BrowserIO) dojo学习笔记(三) dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane ...
dojo0.9 使用心得 dojo学习笔记(一)-dojo.io.IO & dojo.io.BrowserIO) dojo学习笔记(三) dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane ...
dojo0.9 使用心得 dojo学习笔记(一)-dojo.io.IO & dojo.io.BrowserIO) dojo学习笔记(三) dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane ...
12. **dojo/NodeList**:Dojo对DOM NodeList进行了扩展,提供了链式调用和更多的DOM操作方法。 在实际项目中,开发者通常会结合这些知识点来构建复杂的Web应用程序。例如,使用`dojo/ready`确保页面加载完成后初始...
鉴于此,图灵公司引进了Dojo之父亲自撰写的《Mastering Dojo》一书。 本书对Dojo进行了全面而深入地阐述,包括基本使用和高级技巧。全书以一个能让读者迅速上手的简单示例开篇,进而读者们将了解到Dojo的核心,也...
dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档
Dojo的核心概念之一是模块系统(dojo/_base)。这个模块基础包含了Dojo的核心功能,如对象创建、函数绑定、事件处理等。通过使用dojo.require和dojo.provide,开发者可以实现代码的模块化,提高代码复用性和可维护性...
常见的Dojo部件有dijit.form.Button(按钮)、dijit.layout.ContentPane(内容面板)和dijit.Dialog(对话框)等。 DojoInPractice_cn.pdf 可能是一本关于Dojo实战的中文教程,其中可能涵盖了如何在实际项目中运用...
Dojo 是一个功能丰富的 JavaScript 库,它提供了一系列模块化、面向对象的工具,用于构建高性能的 Web 应用程序。在 Dojo 中,模块和包的概念是核心组成部分,它们帮助开发者组织和管理代码,使其更易于维护和重用。...
Dojo的包加载机制允许动态加载所需模块,为用户提供高度的灵活性来扩展和定制工具包。 在技术特性上,Dojo的文件结构包括一个核心代码文件(Dojo.js)和多个JavaScript文件,按照功能不同分为多个版本,如AJAX版、...
dojo js dojo js dojo js dojo js dojo js dojo js dojo js
通过`dojo.require()`,你可以方便地引入更多功能,扩展dojo的基础能力,如drag&drop、高级AJAX传输、字符串处理和强大的Data API等。 Dijit是dojo工具包中的一个项目,它提供了一系列封装和可重用的组件(widgets...
Dialog允许我们以模态或非模态方式显示信息,用户可以与之交互,然后进行确认、取消或其他操作。创建一个基本的Dojo Dialog首先需要引入Dojo的模块,包括`dijit/Dialog`和`dojo/parser`。在HTML文件中,我们可以这样...
DojoX是DOJO的扩展库,包含了更专业和特定领域的功能,如图表绘制、GIS地图、数据网格等。这使得DOJO能够满足更多复杂应用场景的需求。 6. **DOJO 1.1源码分析** 分析DOJO 1.1的源码可以帮助我们理解其内部实现...
Dojox是DOjo的一个扩展包,提供了许多有用的功能,如 CometD、图表、数据Grid等。Dojox可以帮助用户快速构建复杂的Web应用程序。 DOjo中文使用手册是一个非常详细和全面的使用手册,涵盖了DOjo的安装、使用、调试等...
8. **DojoX扩展库**:除了核心Dojo工具包,还有Dojo eXtension(DojoX)项目,包含了各种扩展功能,如图表、Gantt图、GIS地图等。 9. **Dojo的AMD与CommonJS兼容**:虽然Dojo基于AMD,但它也兼容CommonJS规范,这...
1. **dojo/_base**: 这是Dojo的基础模块,包含许多核心功能,如事件处理、类系统、对象扩展、异步操作等。 2. **dojo/dom**: 提供DOM(Document Object Model)操作,包括获取、设置DOM节点属性,创建和移除元素等...