自定义 Javascript EventManager - 请帮我完成

2024-05-03

我正在尝试创建一个自定义 javascript EventManager 类。我采用了 Grant Skinner 在他的 essel.js 框架中使用的格式来创建类,并且需要坚持使用它。在这一点上我真的迷失了 - 我认为 - 至少在概念意义上 - 我在这里有正确的想法,而且主要是范围问题回避了我。

我希望这里有人可以帮助我让 addListener 和dispatchEvent 发挥作用。

[code]

(function(window) {
    var EventManager = function() {
        this.initialize();
    }
    var p = EventManager.prototype;

    // place properties here



    // Constructor
    p.initialize = function() {
        p.listeners = new Array();
    }

    // public methods


    p.addListener = function(fn, event) {
        console.log("p.addListener Hit");
        console.log("event: " + event);
        console.log("handler function: " + fn);
        if(!this.listeners[event]) {
            this.listeners[event] = [];
        }

        if(fn instanceof Function) {
            this.listeners[event].push(fn);
        }
        return this;
    }

    p.dispatchEvent = function(event, params) {
        console.log("Dispatch Event");
        // loop through listeners array
        for(var index = 0; index < listeners[ev].length; index++) {
            // execute matching 'event' - loop through all indices and
            // when ev is found, execute
            listeners[event][index].apply(window, params);
        }
    }

    p.removeListener = function(event, fn) {
        // split array 1 item after our listener
        // shorten to remove it
        // join the two arrays back together

    }
    window.EventManager = EventManager;

}(window));


[/code]
[code]
    <script>

    eventManager = new EventManager();

    var FooTest = function() {
        this.fire = function() {
           //alert("fire");
        }

            this.fire();
     };

    function onFire() {
       // console.log("FIRED!");
    }

    var o = new FooTest();
   eventManager.addListener.call("fire", onFire );
   // eventManager.dispatchEvent.call(o,'fire' );

    </script>
[/code]

这是固定代码的工作示例:http://jsfiddle.net/JxYca/3/ http://jsfiddle.net/JxYca/3/

大多数情况下,您的代码都可以正常工作,只是偶尔出现一些小问题。 IFFE 是立即调用函数表达式 (IIFE)。这就是您对整个函数(窗口){}(窗口)所做的事情。但在这种情况下,这是绝对没有必要的,只会污染代码。 javascript 中没有哈希表这样的东西,但是,您可以使用对象来代替它。属性的名称成为键,它们的值现在是哈希表的值。

但对你来说,这是一个额外的、有点无关的事情。这种处理事件的方式很好,但如果你有 3 个处理程序附加到一个事件,而第二个处理程序因 JavaScript 异常而失败,那么第三个处理程序将永远不会被执行。您可能想快速了解一下prototype.js 是如何处理事件的:https://github.com/sstephenson/prototype/blob/master/src/prototype/dom/event.js https://github.com/sstephenson/prototype/blob/master/src/prototype/dom/event.js他们的事件是非阻塞的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义 Javascript EventManager - 请帮我完成 的相关文章

随机推荐

  • mysql中更新查询中的多个set和where子句

    我认为这是不可能的 因为我找不到任何东西 但我想我会在这里检查一下 以防我没有寻找正确的东西 我的数据库中有一个设置表 其中有两列 第一列是设置名称 第二列是值 我需要同时更新所有这些 我想看看是否有一种方法可以在一个查询的同时更新这些值
  • 将项目子文件夹中的文件放入输出目录

    我想在 C 项目中创建一个文件夹来包含一些配置文件 但是 我不希望将这些文件复制到bin Release MyFolder 我宁愿将它们复制到bin Release直接地 我认为这可以通过拥有一个 虚拟 文件夹 例如解决方案文件夹 来实现
  • 当我删除 @synthesize 语句时出现编译器错误“使用未声明的标识符”

    在最新的 LLVM 版本中 综合属性的要求已被删除 因此我能够删除我所有的 synthesize声明 除了以下声明NSFetchedResultsController 有谁知道为什么当我删除时编译器会警告我 synthesize fetch
  • Rails:如何将替代 Accept: content-types 视为 JSON?

    到目前为止我已经找到了两种方法request format json 在 Rails 中为 true 即传入请求被视为 JSON 一种是如果您请求资源并以 json另一个是如果您提供标头Accept application json在你的要
  • 在java中使用自定义比较器在数组中搜索

    为什么总是返回49999无论strToSearch变量保持 即使使用 clank 搜索变量 它也会返回相同的结果 我是不是错过了什么 String arr new String 100000 String strToSearch 12 fo
  • 可以在delphi数据集中创建一个假数据字段吗?

    我想在 DataSet 不是 ClientDataSet 中创建一个 假 数据字段 该字段不应存储在数据库中 它不是计算字段 应允许用户输入输入数据 该字段具有业务逻辑含义 因此用户更新其值后应该更新其他字段 使用 OnFieldChang
  • 无法在 GAE 应用程序中使用 google-cloud

    我的 Google App Engine 应用程序中的以下行 webapp py 无法导入谷歌云 https googlecloudplatform github io google cloud python 图书馆 from google
  • 如何使用 web.xml 阻止 IP 地址?

    如何通过 web xml 上的某些配置来阻止 IP 地址 我需要过滤器吗 我该如何实施 你不能纯粹通过配置来做到这一点web xml 不 不过 Servlet 过滤器是实现此类功能的好地方 The Filter接口提供HttpServlet
  • 在巨大的数据集上创建独特的节点和关系 NEO4J

    我的问题与这个非常相似 如何通过neo4j中导入的csv文件创建独特的节点和关系 https stackoverflow com questions 25090255 how to create unique nodes and relat
  • 如何动态更改表格单元格文本颜色?

    我需要一个解决方案来通过 javascript 动态更改表格单元格的文本颜色 文本可以是以下颜色 蓝色 绿色 红色和黑色 表示例
  • 200 响应但未返回 JSON 数据 - Restangular 问题?

    使用 reangular 和存根 hub api 我可以在 Firefox RestClient 上点击此 API 并获取包含所有 JSON 数据的响应正文 但在我的应用程序中 我收到 200 但没有响应正文 内容长度甚至表明存在某些内容
  • java小程序paint方法麻烦

    在代码中我正在调用repaint 方法来自init 方法 但输出并不符合我的预期 我打了电话repaint 方法 10 次但它调用paint 仅一次 参见 O P 的屏幕截图 我有什么错误吗 请帮我 谢谢 code import java
  • 更改用户名 Github “您必须验证您的电子邮件地址” git Push 上出现 403 错误

    我最近在 github 上更改了我的用户名 以便所有内容都重定向到我用户名上的新 URL 我通过命令行收到此错误git push 您必须验证您的电子邮件地址 致命 请求 URL 返回错误 403 但是 github 不允许我在帐户 gt 设
  • 如何使用 Openpyxl 获取当前行索引

    我编写了一个 Python 脚本 从 json 文件中提取一些字符串值 将它们存储在某个字典中 并使用我第一次使用的 Openpyxl 将它们填充到 xlsx 文件中 简而言之 它看起来像这样 WORKBOOK Workbook WORKS
  • 如何用C#替换PDF中的文本?

    我在这里看到了很多解决方案 但没有一个是明确或好的答案 这是我的简单问题 希望得到直接答案 我有一个 PDF 文件 模板 其创建的文本如下 名字 姓氏 地址 电话号码 是否可以使用 C 代码将这些模板替换为我选择的文本 没有字段 没有其他复
  • 如何让不显眼的 jquery 远程验证器执行异步..?

    在 MVC3 应用程序中 使用 jquery 不显眼的验证以及带有 远程 验证器的视图 模型 我试图在远程验证期间以及将有效表单提交到服务器时禁用提交按钮并显示等待图标 我以为我已经搞定了 直到我在 IE8 中尝试了它 问题是 当表单无效时
  • 什么是 Google API 发现?

    我无法理解 Google 产品 服务中使用的 API 发现 概念 以下是一些使用上述发现服务访问 Google Cloud Vision 的 Python 代码 from googleapiclient discovery import b
  • 使用 OpenCV 裁剪黑色边缘

    我认为这应该是一个很简单的问题 但我找不到解决方案或有效的关键字进行搜索 我只有这个图像 黑边没有用 所以我想把它们剪掉 只留下 Windows 图标 和蓝色背景 我不想计算Windows图标的坐标和大小 GIMP 和 Photoshop
  • 在 VBScript 中导航 XML 节点(对于 Dummy)

    我正在尝试编写一个脚本来为我操作 xml 文件中的一些数据 我对 VBScript 还很陌生 但有 VB NET 和 VBA 背景 所以我觉得我知道自己在做什么 我认为可能有更好的方法来导航文件 而不是对每一行进行大量调用 InStr 或类
  • 自定义 Javascript EventManager - 请帮我完成

    我正在尝试创建一个自定义 javascript EventManager 类 我采用了 Grant Skinner 在他的 essel js 框架中使用的格式来创建类 并且需要坚持使用它 在这一点上我真的迷失了 我认为 至少在概念意义上 我