我怎样才能让一个data-dojo-attach-event运行呢?

h6my8fg2  于 2022-12-16  发布在  Dojo
关注(0)|答案(3)|浏览(125)

我尝试在以如下编程方式添加domNode后运行该事件:

<a href="javascript:void(0)" data-dojo-attach-event="click:openRegistration">Register</a>

当页面第一次加载时,Dojo不会解析这个事件,因为它是稍后添加的。

parser.parse();

事件未运行。如何使此事件运行?

vfh0ocws

vfh0ocws1#

您不希望dojo解析器解析页面两次:它将冗余地解析和创建已经创建的内容,从而导致混乱。要在解析页面后以编程方式添加节点,请查看dojo/dom-construct

require(["dojo/dom-construct", "dojo/domReady!"],
    function(domConstruct) {

        var openRegistration = function() {
            alert("foo");
        }

        domConstruct.create("a", {
            innerHTML: "Register",
            click: openRegistration,
            href: "javascript:void(0)"
        }, document.body);
    });

将document.body替换为对要插入节点的父节点的引用,并查看第3个参数以了解放置选项。

icnyk63a

icnyk63a2#

您应该使用onclick:openRegistration而不是click:openRegistration

<a href="javascript:void(0)" data-dojo-attach-event="onclick:openRegistration">Register</a>
t5zmwmid

t5zmwmid3#

没有看到你的代码的其余部分,我猜想你有一个范围问题。或者你没有正确的dom事件-onClick
您的函数需要是使用模板的同一个小部件的一部分,模板带有继承_TemplatedMixin的附加事件。

require([
    'dojo/declare',
    'dijit/_WidgetBase', 
    'dijit/_TemplatedMixin', 
    'dojo/text!myNameSpace/templates/MyWidget.html'
], 
function(declare, _WidgetBase, _TemplatedMixin, template){
    declare('MyWidget', [ _WidgetBase, _TemplatedMixin ], {
        templateString: template, 
        openRegistration: function {
               // do stuff here
        }
    });
});

相关问题