引用说明:原文来自于http://coralsea.bokee.com/viewdiary.12065264.html,为了方便本人阅读,文本格式略有调整。
本文档目标:
1、简单介绍Dojo的事件处理框架——Event System。
2、这样的事件处理框架对于页面内的组件解耦是有帮助的。
Dojo Event System
Dojo的Event System以类似于AOP的advice机制的风格,来为DOM事件和任何的方法提供统一的事件处理框架,而不会给使用大多数简单的DOM事件机制的开发者带来额外的学习和开发负担。
Dojo关注的事件不仅仅是DOM事件,它把任何的JS方法调用都看作可以侦听的事件。
参见:The Dojo Event System
事件绑定示例:
1.简单的示例代码:
场景:当按钮点击事件发生时,调用handleOnClick方法。
var buttonNode = document.getElementById(“button”);
function handleOnClick(evt)
{
……
}
dojo.event.connect(buttonNode,”onclick”,”handleOnClick”);
这样当按钮的点击事件时间发生时,handleOnClick方法也就会被调用。
2. 普通的事件绑定代码:
场景:如果按钮的点击事件发生,则调用object的handle方法。
以前我们这么写:
var buttonNode= document.getElementById("button");
buttonNode.onclick = function(evt){
object.handler(evt);
};
现在Dojo将其简化成:
var buttonNode = document.getElementById("button");
dojo.event.connect(buttonNode, "onclick", object, "handler");
3. 多个事件的绑定
var buttonNode = document.getElementById("button");
dojo.event.connect(buttonNode, "onclick", object1, "handler1");
dojo.event.connect(buttonNode, "onclick", object2, "handler2");
这样当按钮点击事件发生时,就会先调用object1的handle1方法,再调用object2的handle2方法。
4. 解除绑定
可以使用Dojo的disconnect方法,调用参数与connect一致,即可解除之前的绑定操作。
5. 关键字绑定
为了防止不经意间对事件的多处绑定,造成连锁调用。Dojo提供关键字链绑定,比如可以只绑定一次:
dojo.event.kwConnect({
srcObj: exampleObj,
srcFunc: "foo",
targetObj: exampleObj,
targetFunc: "bar",
once: true
});
同样,对应也提供了一个kwDisconnect()方法来进行关键字绑定的解除。
6. 延迟执行和循环执行的绑定
Dojo同样可以通过关键字绑定来使方法延迟执行或者循环执行。
7. 高级应用:Seeking Advice
除了提供上述的后次序绑定,还可以提供before的绑定,这有点类似于AOP的逻辑。
提供around advice方式,解决场景:
如果待绑定的源方法和目的方法的签名不一样;
如果想改变代码的行为,但是又不改写代码。
around advice可以包装任何方法,然后操纵方法的输入和输出。
代码示例如下:
function foo(arg1, arg2){
// …
}function aroundFoo(invocation){
if(invocation.args.length < 2){
// note that it's a real array, not a pseudo-arr
invocation.args.push("default for arg2");
}
var result = invocation.proceed();
// we could change the result here
return result;
}dojo.event.connect("around", "foo", "aroundFoo");
这样,当foo方法只传入一个参数的时候,aroundFoo方法会为其添加第二个参数,然后继续foo方法的执行。
8. 通过Topic机制来注册和订阅事件
示例代码如下:
var exampleObj = {
counter: 0,
foo: function(){
alert("foo");
this.counter++;
},
bar: function(){
alert("bar");
this.counter++;
}
};
// previously we used this connect syntax
//
// dojo.event.connect(exampleObj, "foo", exampleObj, "bar");
//// which we now replace with:
// set up our publisher
dojo.event.topic.registerPublisher("/example", exampleObj, "foo");// and at some point later, register our listener
dojo.event.topic.subscribe("/example", exampleObj, "bar");
工作的基本原理:
通过在JavaScript中动态改变方法名称,使用apply方法来实现对方法的顺序绑定。
基本原理代码:
var global = this;
function naiveConnect(funcName1, funcName2){
global["__prefix"+funcName1] = funcName1;
global[funcName1] = function(){
global["__prefix"+funcName1].apply(global, arguments);
global[funcName2].apply(global, arguments);
}
}
相关推荐
Dojo事件处理框架是JavaScript库Dojo Toolkit中的一个重要组成部分,它提供了一种统一的方式来管理和处理DOM事件以及JavaScript对象之间的交互。这个系统深受面向切面编程(AOP)思想的影响,尤其是其advice机制,...
4. **事件处理**:Dojo的`dojo/on`模块允许开发者监听和处理DOM事件,它支持事件委托和跨浏览器兼容性,简化了事件处理代码。 5. **Ajax通信**:Dojo的`dojo/xhr`模块提供了异步的HTTP请求功能,支持GET、POST等...
dojo JavaScript框架是Web开发中的一个强大工具,特别在处理Ajax(Asynchronous JavaScript and XML)请求时,它提供了丰富的功能和高效的性能。Dojo的核心在于它的模块化系统,这使得开发者可以方便地导入和管理所...
在“DOJO和验证框架和国际化.rar”这个压缩包中,可能包含的是一个示例项目,展示了如何在DOJO框架下使用验证功能和实现国际化。当你将这些文件解压并导入到Web工程后,可能需要调整包结构、导入必要的DOJO模块,...
Dojo事件对象包含了丰富的属性,例如`bubbles`(事件是否冒泡)、`currentTarget`(当前处理事件的节点)和`keyCode`(键盘事件的键码)等,这些都极大地简化了跨浏览器的事件处理。 键码的标准化是Dojo的一大亮点...
Dojo JS框架是一款备受开发者喜爱的前端开发工具,其最新版本带来了更多优化和增强的功能,旨在提高Web应用程序的性能和可维护性。Dojo不仅仅是一个简单的JavaScript库,它是一个全面的开发框架,提供了丰富的功能集...
Dojo框架是一个强大的JavaScript库,它为Web开发提供了丰富的功能,包括UI组件、数据管理、AJAX通信以及模块化开发支持。本教程将深入探讨Dojo框架的使用,帮助开发者更好地理解和应用这一工具。 首先,从`dojo-...
Dojo提供了一个强大的事件处理系统,通过dojo/on模块,可以监听并处理DOM事件,同时也支持自定义事件。 8. **Dojo的国际化和本地化**: Dojo支持多语言环境,通过dojo/i18n模块可以轻松实现应用的国际化和本地化...
Dojo作为一个强大的JavaScript库,它的模型框架使得开发者能够更高效、更方便地处理页面上的元素和结构。下面我们将深入探讨Dojo模型框架中的一些关键功能。 1. `dojo.dom.isNode()`: 这个函数用于检测传入的对象...
其中,`dojo/dom`和`dojo/query`模块用于DOM操作,`dojo/on`处理事件监听,`dojo/Deferred`则用于异步编程,而`dojo/request`则负责AJAX通信。 **3. UI组件** DOJO的`dijit`模块提供了大量的UI组件,如按钮、表格...
当我们把DWR和Dojo结合使用时,可以在Dojo的用户界面组件上触发事件,通过DWR调用服务器端的方法,实现数据的获取和更新,从而提供动态的Web应用体验。例如,可以创建一个Dojo表单,当用户提交表单时,通过DWR调用...
Dojo 是一个强大的JavaScript工具库,专为构建富互联网应用程序(RIA)而设计,特别是在AJAX、DOM操作、事件处理、动画效果以及模块化开发方面表现出色。这个“最棒的AJAX框架DOJO中文手册”提供了全面的中文指南,...
《dojo中文文档-dojo手册》提供了全面而深入的Dojo框架知识,这是一份非常有价值的资源,对于想要理解和掌握Dojo JavaScript库的开发者来说至关重要。Dojo是一个强大的JavaScript工具包,它提供了丰富的功能,包括...
总之,Dojo 提供了一个强大且全面的 JavaScript 开发框架,涵盖了模块化、事件处理、I/O、DOM 操作、图形和 URI 处理等多个方面。通过深入学习和理解这些模块和包,开发者可以构建高效、健壮的 Web 应用程序。
Dojo框架是一个强大的JavaScript库,主要用于构建富互联网应用程序(RIA)。这份“Dojo框架英文使用指南”涵盖了Dojo的核心概念、组件以及最佳实践,旨在帮助开发者深入理解和有效地使用这一工具集。 Dojo框架的...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,包括DOM操作、事件处理、动画效果、AJAX交互以及模块化开发等。本实战教程将深入讲解Dojo的核心概念和实用技巧,通过具体的例子帮助你快速...
Dojo 模块化的另一个重要概念是`dojo/_base`,这是Dojo的基础模块,包含了核心功能,如事件处理、动画、对象创建等。其他模块往往依赖于`_base`中的功能,因此在大部分应用中,`_base`会在加载其他模块之前自动加载...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,涵盖了从DOM操作、事件处理到AJAX通信、动画效果等各个方面。在深入理解Dojo之前,我们需要了解JavaScript在网页开发中的核心地位以及它...