Javascript 是否可以通过代码触发特定于dojo的事件?

Javascript 是否可以通过代码触发特定于dojo的事件?,javascript,dojo,Javascript,Dojo,我在一个基于dojo的大型Web项目中遇到了一个小问题(据我所知,Dojo1.7的早期版本是1.3)。我想通过代码触发特定事件,但不知道如何实现。这是一个名为ondijitclick的事件,它通过html中的数据dojo attach event-属性注册。我也不能只调用由该事件触发的方法,因为我只能在需要该功能的位置访问domnodes(或者我不知道如何访问属于该domnodes的对象) 我还有代码,至少可以触发“onclick”之类的常见事件: 我可以输入ondijitclick事件,但不会

我在一个基于dojo的大型Web项目中遇到了一个小问题(据我所知,Dojo1.7的早期版本是1.3)。我想通过代码触发特定事件,但不知道如何实现。这是一个名为
ondijitclick
的事件,它通过html中的
数据dojo attach event
-属性注册。我也不能只调用由该事件触发的方法,因为我只能在需要该功能的位置访问domnodes(或者我不知道如何访问属于该domnodes的对象)

我还有代码,至少可以触发“onclick”之类的常见事件:

我可以输入
ondijitclick
事件,但不会发生任何事情,也不会显示任何错误。VisualStudio(带有ReSharper)本身告诉我无法解决此事件。因此,我认为不会触发任何事件,并且由于未知的事件类型而忽略了命令

最后,整个问题是:是否存在一种通过dojo 1.3(或dojo 1.7之前的版本)的代码触发此类事件的方法

编辑:澄清需要dojo 1.3的解决方案。

模块是一个可以用作mixin或基类的类,用于向类添加
on()
emit()
方法,以侦听事件和发出事件

e、 g

在您的示例中,有一个小部件连接到
ondijitclick
,而不是
onclick
(有关可访问性),请参阅。您可以从中使用
emit()
方法,
emit()
方法为调度事件提供规范化机制

对于旧版本的dojo测试

        var element= dojo.byId("myElement");
        // IE does things differently
        if (dojo.isIE)
        {
            element.fireEvent("ondijitclick");
        }
        else
        { // Not IE
            var event = document.createEvent("HTMLEvents");
            event.initEvent("ondijitclick", false, true);
            console.debug(event);
            element.dispatchEvent(event);
        } 

我找到了如何执行连接到
ondijitclick
-事件的方法的解决方案,在本例中:

因为我已经有了domnode,所以可以访问domnode的id。有了这个id,我可以使用
dijit.byId(node.id)
获得整个dijit实例。当具有该功能时,很容易调用连接到
ondijitclick
-事件的dijit函数


在我的例子中,我有以下问题,因为事件代码需要一些事件参数,当它们没有设置时会崩溃。因此,我必须了解如何创建事件参数,并将具有正确属性值的事件参数传递给函数。但这是一个单独的问题,主题为

谢谢您的回答,但不幸的是,您的解决方案似乎基于dojo 1.7(或更高版本)。该项目使用的是比Dojo1.7更早的版本(如前所述),因此我需要一个dojo旧方法的解决方案。。。(当前使用的版本为1.3)。目前无法升级。我猜应该是
dijitclick
,不带on前缀。因为您知道有一个ondijitclick事件,所以会有一个代码将该事件附加到dijit。您能否了解ondijitclick是如何附加到dijit/dom节点的?该事件是通过html模板文件中的属性附加的。单击ui元素时,整个过程都会正确执行。所以一切都很好。我只想从“应用程序”中的另一个地方通过代码触发相同的操作。我无法通过javascript代码直接访问此ui元素,只能使用dojo.query并获取domnode。不知何故,我找不到一个继承ui元素的点击逻辑或允许我访问该对象的对象。
define(["dojo/_base/declare","dojo/Evented", "dojo/Stateful"
        ], function(declare, Evented, Stateful){
                var EventedStateful = declare([Evented, Stateful], {...});
                var instance = new EventedStateful();
                instance.on("open", function(event){
                  //... do something with event
                });

            instance.emit("open", {name:"some event", ...});
        var element= dojo.byId("myElement");
        // IE does things differently
        if (dojo.isIE)
        {
            element.fireEvent("ondijitclick");
        }
        else
        { // Not IE
            var event = document.createEvent("HTMLEvents");
            event.initEvent("ondijitclick", false, true);
            console.debug(event);
            element.dispatchEvent(event);
        }