javascript - Dojo Evented - "load"事件未触发/捕获

标签 javascript events dojo

我有一个继承 dojo/Evented 的类。我在代码中调用 myClass.emit("load",{}) 。并通过 myClassInstance.on("load",function(){console.log("fired!")});

收听它

但是,它没有被解雇。但有趣的是,如果我更改为 myClass.emit("myClass-load",{}) 并通过 myClassInstance.on("myClass-load",function(){console.log ("fire")}); 事件被触发!

我在这里错过了什么?是否因为其他对象也监听“load”事件,所以它没有被 myClassInstance 捕获?

通常,如果两个对象触发的两个事件具有相同的名称,会发生什么情况?为每个事件指定唯一的名称是否更好?

谢谢, 艾伦

最佳答案

如果您的类继承了 dijit/_WidgetBase,我可能会怀疑它对 onemit 的处理存在一些差异导致了您的问题。

首先,_WidgetBase won't emit DOM events在小部件调用 startup 之前或在它被销毁之后/同时。换句话说,它不会在其构造函数postscriptbuildRenderingpostCreate期间发出DOM事件。

其次,_WidgetBase 包含一些公认的复杂逻辑,用于向后兼容旧版小部件,这些小部件通过遵循 onXxx 命名模式的方法实现事件。即使存在匹配的 onXxx 方法,_WidgetBase#emit 仍会触发 DOM 事件,_WidgetBase#on will not listen for the DOM event如果它首先找到 onXxx 方法。

因此,我建议确保两件事:

  • emitstartup 之前未在小部件上调用
  • 该小部件还没有 onLoad 方法

我想我应该指出的最后一件事是,你不应该让一个类继承两者 _WidgetBaseEvented,因为这个可能会在小部件逻辑中导致意外的副作用,尤其是在扩展现有 Dijit 小部件时。单独扩展 _WidgetBase 就足够了,因为它已经定义了自己的 emiton (上面链接)。

关于javascript - Dojo Evented - "load"事件未触发/捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31360745/

相关文章:

Android:通过 MTP 连接时如何检测 MediaStore 的变化

javascript - 切换 dojo 中 div 的显示在 Google Chrome 中无法正常工作

javascript - 当外部包不可用并且仍然运行 domReady 时,有没有办法优雅地失败?

javascript - 在 AngularJS 中使用 $http 服务时的变量范围

javascript - 如果刷新页面时您不希望数据存在于 window.localstorage 中,是否有任何方法可以将表单值存储在 window.localstorage 中?

javascript - React - 处理动态内联样式的理想方式

javascript - 如何确保绑定(bind)到 hashChange 事件不冒泡?

javascript - 通过 Meteor Iron Router 获取 Json/Collection 的最简单方法

c# - 控制点击事件点击框

javascript - dojo 对话框中的滚动条在 IE9 中不起作用