我有一个继承道场/偶发的类。我在代码中调用myClass.emit("load",{})。听myClassInstance.on("load",function(){console.log("fired!")});的
然而,它并没有被发射。但是有趣的是,如果我切换到myClass.emit("myClass-load",{})并听myClassInstance.on("myClass-load",function(){console.log("fire")});的话,事件就会被解雇!
我错过了什么?是因为其他对象也会监听"load“事件,因此不会被myClassInstance捕获吗?
--通常情况下, --如果两个由两个对象触发的事件具有相同的名称,会发生什么?唯一地命名每一个事件更好吗?
谢谢你,艾伦
发布于 2015-07-11 20:19:25
如果您的类继承了dijit/_WidgetBase,那么它对on和emit的处理会有几个不同之处,我可能怀疑这是导致您的问题的原因。
首先,小部件之前的_WidgetBase 不会发出DOM事件已经调用了startup,或者在被销毁后/被销毁了。换句话说,它不会在constructor、postscript、buildRendering和postCreate期间发出DOM事件。
其次,_WidgetBase包含一些无可否认的复杂逻辑,用于向后兼容遗留小部件,这些小部件通过遵循onXxx命名模式的方法实现事件。尽管_WidgetBase#emit仍然会触发DOM事件,即使存在匹配的onXxx方法,但如果它首先找到onXxx方法,则会触发侦听DOM事件。
因此,我建议确保两件事:
emit之前调用startuponLoad方法我想我要指出的最后一件事是,您不应该让类同时继承_WidgetBase和Evented,因为这可能会在小部件逻辑中造成意外的副作用,特别是在扩展现有的Dijit小部件时。仅仅扩展_WidgetBase就足够了,因为它已经定义了自己的emit和on (上面链接的)。
https://stackoverflow.com/questions/31360745
复制相似问题