`

dojo的事件处理框架

阅读更多

引用说明:原文来自于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事件处理框架

    Dojo事件处理框架是JavaScript库Dojo Toolkit中的一个重要组成部分,它提供了一种统一的方式来管理和处理DOM事件以及JavaScript对象之间的交互。这个系统深受面向切面编程(AOP)思想的影响,尤其是其advice机制,...

    dojo1.1 javascript框架

    4. **事件处理**:Dojo的`dojo/on`模块允许开发者监听和处理DOM事件,它支持事件委托和跨浏览器兼容性,简化了事件处理代码。 5. **Ajax通信**:Dojo的`dojo/xhr`模块提供了异步的HTTP请求功能,支持GET、POST等...

    dojo JavaScript框架 Ajax学习

    dojo JavaScript框架是Web开发中的一个强大工具,特别在处理Ajax(Asynchronous JavaScript and XML)请求时,它提供了丰富的功能和高效的性能。Dojo的核心在于它的模块化系统,这使得开发者可以方便地导入和管理所...

    DOJO和验证框架和国际化

    在“DOJO和验证框架和国际化.rar”这个压缩包中,可能包含的是一个示例项目,展示了如何在DOJO框架下使用验证功能和实现国际化。当你将这些文件解压并导入到Web工程后,可能需要调整包结构、导入必要的DOJO模块,...

    Dojo基础2事件侦听器

    Dojo事件对象包含了丰富的属性,例如`bubbles`(事件是否冒泡)、`currentTarget`(当前处理事件的节点)和`keyCode`(键盘事件的键码)等,这些都极大地简化了跨浏览器的事件处理。 键码的标准化是Dojo的一大亮点...

    Dojo JS框架最新版

    Dojo JS框架是一款备受开发者喜爱的前端开发工具,其最新版本带来了更多优化和增强的功能,旨在提高Web应用程序的性能和可维护性。Dojo不仅仅是一个简单的JavaScript库,它是一个全面的开发框架,提供了丰富的功能集...

    Dojo框架使用教程

    Dojo框架是一个强大的JavaScript库,它为Web开发提供了丰富的功能,包括UI组件、数据管理、AJAX通信以及模块化开发支持。本教程将深入探讨Dojo框架的使用,帮助开发者更好地理解和应用这一工具。 首先,从`dojo-...

    ajax最好的框架之一:dojo包

    Dojo提供了一个强大的事件处理系统,通过dojo/on模块,可以监听并处理DOM事件,同时也支持自定义事件。 8. **Dojo的国际化和本地化**: Dojo支持多语言环境,通过dojo/i18n模块可以轻松实现应用的国际化和本地化...

    Dojo模型框架

    Dojo作为一个强大的JavaScript库,它的模型框架使得开发者能够更高效、更方便地处理页面上的元素和结构。下面我们将深入探讨Dojo模型框架中的一些关键功能。 1. `dojo.dom.isNode()`: 这个函数用于检测传入的对象...

    DOJO.js 最优秀的js 框架 1.9.3

    其中,`dojo/dom`和`dojo/query`模块用于DOM操作,`dojo/on`处理事件监听,`dojo/Deferred`则用于异步编程,而`dojo/request`则负责AJAX通信。 **3. UI组件** DOJO的`dijit`模块提供了大量的UI组件,如按钮、表格...

    dwr,dojo框架应用实例

    当我们把DWR和Dojo结合使用时,可以在Dojo的用户界面组件上触发事件,通过DWR调用服务器端的方法,实现数据的获取和更新,从而提供动态的Web应用体验。例如,可以创建一个Dojo表单,当用户提交表单时,通过DWR调用...

    最棒的AJAX框架DOJO中文手册

    Dojo 是一个强大的JavaScript工具库,专为构建富互联网应用程序(RIA)而设计,特别是在AJAX、DOM操作、事件处理、动画效果以及模块化开发方面表现出色。这个“最棒的AJAX框架DOJO中文手册”提供了全面的中文指南,...

    dojo中文文档-dojo手册

    《dojo中文文档-dojo手册》提供了全面而深入的Dojo框架知识,这是一份非常有价值的资源,对于想要理解和掌握Dojo JavaScript库的开发者来说至关重要。Dojo是一个强大的JavaScript工具包,它提供了丰富的功能,包括...

    DOJO 学习笔记 dojo

    总之,Dojo 提供了一个强大且全面的 JavaScript 开发框架,涵盖了模块化、事件处理、I/O、DOM 操作、图形和 URI 处理等多个方面。通过深入学习和理解这些模块和包,开发者可以构建高效、健壮的 Web 应用程序。

    Dojo框架英文使用指南

    Dojo框架是一个强大的JavaScript库,主要用于构建富互联网应用程序(RIA)。这份“Dojo框架英文使用指南”涵盖了Dojo的核心概念、组件以及最佳实践,旨在帮助开发者深入理解和有效地使用这一工具集。 Dojo框架的...

    dojo实战+实用例子

    Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,包括DOM操作、事件处理、动画效果、AJAX交互以及模块化开发等。本实战教程将深入讲解Dojo的核心概念和实用技巧,通过具体的例子帮助你快速...

    dojo模块化实例

    Dojo 模块化的另一个重要概念是`dojo/_base`,这是Dojo的基础模块,包含了核心功能,如事件处理、动画、对象创建等。其他模块往往依赖于`_base`中的功能,因此在大部分应用中,`_base`会在加载其他模块之前自动加载...

    dojo相关详细资料

    Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,涵盖了从DOM操作、事件处理到AJAX通信、动画效果等各个方面。在深入理解Dojo之前,我们需要了解JavaScript在网页开发中的核心地位以及它...

Global site tag (gtag.js) - Google Analytics