`
tailsherry
  • 浏览: 136426 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Dojo的高级运用:Widget的制作

阅读更多

在上一篇 使用Dojo和JSON构建Ajax应用 中,我初步介绍了一下Dojo和JSON,并提供了简单的例子。在这篇文章中,将涉及到Dojo的高级运用之一,利用Dojo的高可扩展性框架来制作widget。在某种意义上来说,widget的模块化开发可以大大的简化我们的工作。

什么是Dojo Widget

Widget是一个比较抽象的概念,就我们实际遇到的UI页面来说,按钮、文本框以及滚动条等都是一个个Dojo Widget. 一个Widget可以包含很多个网页元素(如按钮文本等),你可以在一个HTML页面上同时指定多个相同性质的Widget,可以给他们绑定一个事件,自定义他们的行为,甚至可以用它来创建其他的Widget。

本篇文章的讲到的例子叫做Autocompletion,一个类似于google搜索输入框的例子。这个Widget将侦测用户的键盘输入事件,并提供一个List供用户去选择可能要输入的内容。

Widget的组成

在开发一个Widget的时候,要事先决定到底需要那些个UI元素,了解他们是如何工作的。在本例中,包含了一下四个部分:
1、dojo.js:标准的Dojo的类库
2、js/dojo/utils/templates/AutoComplete.html:包含了所有相关的UI元素,以及相关的HTML标签。template中可以包含任何标准的HTML标签,但是只能有一个根元素。如果有多个元素在根部,那么默认第一个是根元素。
3、js/dojo/utils/AutoComplete.js:针对本Widget的JavaScript脚本,这里经常是一个JavaScript类,它继承了Dojo Widget中的一个相关类。
4、example3.jsp:用到Widget组件的页面。

学习并理解运用JavaScript来访问控制UI元素是制作Widget的关键。一旦Ajax功能被集成入JavaScript,创建一个RIA将是一件比较有创新意义的工作。

访问UI元素

如上段第2点讲到的,指定一个根元素是必须的,如AutoCompletion中的根元素是一个div,我们可以通过this.domNode来访问这个元素。如:

this.domNode.style.display = "none";   
  

如果要通过JavaScript访问界面上其他性质的元素,可以遍历this.domNode直到我们找到目标UI元素。另外,我们可以通过dojoAttachPoint属性:

<input type="text" name="someTextField" dojoAttachPoint="myTextField"/> 
 

如果这段代码嵌入在了一个HTML中,那么我们可以直接在相关的JavaScript中使用this.myTextField来访问这个UI元素(注意,是HTML对象,并非此对象的值)。

Dojo可以同时绑定多个事件到UI元素,我们可以用dojo.event.connect()来绑定事件,如:

dojo.event.connect(this.domNode, "onclick", this, "myFunction");   
 

此外,我们也可以模仿上面属性访问的方式:

<div dojoAttachEvent="onclick: myFunction">   
<div dojoAttachEvent="onclick, onmouseover: myFunction">   

 


Widget牛刀小试

先看下面的示例代码:

dojo.provide("utils.AutoComplete");    
   
dojo.require("dojo.dom");    
...    
   
dojo.widget.tags.addParseTreeHandler("dojo:AutoComplete");    
   
utils.AutoComplete = function() {    
   
 // call super constructor    
 dojo.widget.HtmlWidget.call(this);    
   
 // load template    
 this.templatePath =    
    dojo.uri.dojoUri("utils/templates/AutoComplete.html");    
   
 this.widgetType = "AutoComplete";    
   
 // Instance variables    
 this.action = "";    
 this.formId = "";    
 this.form = {};    
 ...    
   
 this.postCreate = function() {    
  this.form = document.getElementById(this.formId);    
  this.textbox = document.getElementById(this.textboxId);    
  dojo.event.connect(this.textbox, "onkeyup",    
                    this, "textboxOnKeyUp");    
  ...    
 }    
   
 this.textboxOnKeyUp = function(evt) {    
  if (this.isKey(evt.keyCode, 38, 40)) {    
   this.checkUpDownArrows(evt.keyCode);    
  } else {    
   bindArgs = {    
    url:  this.action,    
    mimetype:   "text/javascript",    
    formNode:   this.form    
   };    
   var req = dojo.io.bind(bindArgs);    
   dojo.event.connect(req, "load", this, "populateChoices");    
  }    
 }    
   
 // Handler for "load" action of dojo.io.bind() call.    
 this.populateChoices = function(type, data, evt) {    
  ...    
 }    
}    
   
// define inheritance    
dojo.inherits(utils.AutoComplete, dojo.widget.HtmlWidget);
 

 

例子中的代码是JavaScript类AutoComplete,这个js也是这个Widget例子的核心。

当我们定义一个Widget的时候,Dojo需要通过dojo.provide()方法显式的标志这个类;另外,我们在最后通过dojo.inherits()方法来定义此JavaScript类的继承,在js代码的最前端用 dojo.widget.HtmlWidget.call(this)来触发实现这个继承;此外,还有来自于父类的this.templatePath属性,this.postCreate()方法都应该注意到。

在上面的例子中,我们用到了addParseTreeHandler("dojo:AutoComplete") 来标志我们在HTML中对该Widget的引用,那在我们的页面中,应该如此调用这个Widget:

<dojo:AutoComplete action="getBooks.jsp" textboxId="bookName" formId="bookForm"/> 
 

这段页面代码输出AutoComplete htmltemplate中的页面到浏览器,所有在这段tag中的属性都是直接对应后台js中的this."attribute"的。

 

本章和 使用Dojo和JSON构建Ajax应用 中涉及到的代码:dojo_json.rar

  • dojo_json.rar (190.2 KB)
  • 描述: <<Dojo的高级运用:Widget的制作>> 和 <<使用Dojo和JSON构建Ajax应用>> 中涉及到的源代码
  • 下载次数: 202
分享到:
评论
2 楼 chen-java 2009-02-26  
顶顶顶顶顶顶顶顶顶!
1 楼 sjtde 2008-12-12  

相关推荐

    dojo create custome widget

    本话题主要聚焦于如何利用Dojo创建自定义的Widget,这是一个对于提高代码复用性和应用可维护性至关重要的技术。 Dojo的Widget系统是其核心特性之一,它允许开发者将HTML模板、CSS样式和JavaScript逻辑封装在一起,...

    dojo api 中文版

    其中 Dojo 是核心功能包,Dijit 中存放的是 Dojo 所有的 Widget 组件,而 DojoX 则是一些扩展或试验功能。 常用的包包括: * dojo.io:不同的 IO 传输方式,如 script 和 IFrame 等。 * dojo.dnd:拖放功能的辅助 ...

    Dojo之Widget标签开发 - 我为人人,人人为我 - BlogJava

    本文主要探讨的是在Dojo框架下进行Widget标签开发的技术细节,旨在帮助开发者更好地理解和利用Dojo构建可重用、模块化的Web组件。 首先,我们要了解什么是Widget。在Dojo中,Widget是UI组件的基础,它封装了HTML...

    DOJO_API_中文参考手册 附加注释实例

    - Dojo提供了丰富的Widget组件,如表格、树、菜单等,方便开发者构建用户界面。 3. Dojo、Dijit和DojoX的包和功能: - Dojo核心功能包提供了Dojo的基础功能。 - Dijit包存放了所有Dojo的Widget组件。 - DojoX包...

    Dojo Toolkit 1.2.0: Dojo + Dijit + DojoX

    Include &lt;SCRIPT TYPE="text/javascript" SRC="dojo/dojo.js"&gt;&lt;/SCRIPT&gt; and you're on your way. Browse to dojo/tests/runTests.html or dijit/themes/themeTester.html to see Dojo in action

    widget-dojo

    5. **数据集成**:Widget可以集成各种数据服务,例如IP查询、股票信息等,使用户可以快速获取所需信息。 **Widget的发展与商业潜力** 随着Widget的流行,它们逐渐成为了一种商业机会。Mybloglog就是一个成功的例子...

    dojo相关详细资料

    总结来说,Dojo 是一个全面的JavaScript框架,它提供了从基础功能到高级组件和动画的全方位支持。通过深入学习Dojo,开发者可以构建高效、可维护的Web应用程序,并利用其强大的工具来优化用户体验。无论你是新手还是...

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

    5. **dojo/Widget**:Dojo提供了丰富的UI组件,如按钮、表单、对话框等,它们都继承自`dojo/_base/widget.Widget`。开发者可以通过`dojo/_base/lang.extend`扩展自定义组件。 6. **dojo/Stateful**:这个基类提供了...

    dojo-ckeditor:CKEditor 集成为 DojoFormElement 作为 Dojo Toolkit 的一部分

    该项目为提供了包装器,以便在带有 dijit Forms 的 dojo 工具包中使用。 这个包装器定义了新的 FormValue 对象 dojo-ckeditor/Editor。 dojo-ckeditor 项目在 MIT 许可下可用。安装使用 Bower 自动下载可以使用以下...

    dojo源码

    3. Dojo源码结构:Dojo的源码通常分为多个模块,如dojo/main、dojo/_base、dojo/dom、dojo/on等,每个模块负责不同的功能。例如,`dojo/main`是Dojo的核心入口点,`dojo/_base`包含基础功能,如事件处理和对象创建,...

    dojo widget安全通讯

    它包含了大量预构建的Widget,支持数据绑定、模块化代码和高级动画效果,同时强调性能和可访问性。 4. **Dojo Mashup** Dojo Mashup允许开发者将多个独立的Widget集成到一个页面中,这些Widget可以来自不同的源,...

    DOJO开发指南(结合DOJO中国及网上的资料整理的结果)

    综上所述,DOJO是一个强大的JavaScript开发工具,其模块化、跨浏览器的特性和丰富的Widget系统使其成为开发RIA的首选之一。通过深入理解和熟练使用DOJO,开发者可以大大提高工作效率,创建出功能丰富、用户体验优良...

    Dojo 1.10版离线参考手册

    3. **Dojo Widget系统**: - Dojo的部件系统是其强大之处,它提供了一系列可复用的UI组件,如按钮、表单、对话框等。 - `dijit` 和 `dojox` 模块包含各种部件,`dijit`是主要的部件库,`dojox`则包含更多实验性的...

    Code_Dojo_1:代码的代码dojo 20151008

    【标题】"Code_Dojo_1:代码的代码dojo 20151008" 指的是一场编程活动,可能是线上或线下聚会,参与者们在这样的活动中一起练习编程技巧,分享代码和经验。2015年10月8日是这个特定活动的日期。"Code Dojo"通常是一个...

    dojo控件的使用和入门心得

    - **Dijit**:Widget组件,提供丰富的用户界面构建模块。 - **DojoX**:实验性或扩展功能,可能在未来版本中整合至主命名空间。 ##### 常用包概览 - **dojo.io**:支持多种IO传输方式,如script、IFrame等。 - **...

    dojo Ajax

    dojo是JavaScript库中的一个强大工具集,特别以其Ajax功能闻名。dojo Ajax框架是dojo库的核心部分,它提供了高效、灵活且全面的解决方案,...在实际开发中,理解并熟练运用这些知识点是提高开发效率和代码质量的关键。

    Dojo之路:如何利用Dojo实现Drag and Drop效果

    ### Dojo之路:如何利用Dojo实现Drag and Drop效果 #### 概述 随着Web开发技术的不断进步,用户界面的交互性和动态性也日益增强。Drag and Drop(拖放)作为一种直观的操作方式,在现代Web应用中变得越来越普遍。...

Global site tag (gtag.js) - Google Analytics