gpt4 book ai didi

javascript - 为什么我不能将我的事件处理程序放在我的 Dijit 小部件的类声明中?

转载 作者:行者123 更新时间:2023-11-29 22:31:26 24 4
gpt4 key购买 nike

如果我在实例化我的小部件时定义我的点击处理程序:

new W2({onClick: a_function});

postMixinProperiespostCreate 期间:

dojo.declare("W2", [W1], {
postMixInProperties: function(){
this.onClick= a_function;
}
});

或通过其中一种声明方法

<div data-dojo-type="W2">
<script
type="dojo/connect"
data-dojo-event="onClick">
a_function.call(this);
</script>
</div>

dojo 施展魔法,让 domNode 上的 onclick 事件触发我的 onClick 处理程序。

但是,如果我将 onClick 定义放在类声明中,连接显然会中断:

dojo.declare("W2", [W1], {
onClick: a_function
});

仍然可以直接调用my_widget.onClick,不再在onclick 事件后自动调用。

为什么会发生这种情况,这是否正常?为我的小部件类定义事件处理程序的“标准方法”是什么?


编辑: W1 的代码:

dojo.declare("W1", [dijit._Widget, dijit._Templated], {
label: 'defaultLabel',
templateString: '<div>${label}</div>'
});

最佳答案

您需要在模板化小部件中定义附加事件以将 DOM 事件连接到函数。

尝试做一些事情:

dojo.declare("W1", [dijit._Widget, dijit._Templated], {
label: 'defaultLabel'
, templateString: "<div data-dojo-attach-event='onclick: onClick'>${label}</div>"
});

然后您可以将 onClick 放在您的类声明中,它将连接到 DOM 事件。

dojo.declare("W2", [W1], {
onClick: a_function
});

如果小部件没有模板化,并且父类(super class)已经将 DOM 事件连接到名为 onClick 的函数,那么设置 onClick 函数就可以了。

dojo.declare("W1", [dijit._Widget, dijit.form.Button], {
label: 'defaultLabel'
});

如果小部件没有模板化并且父类(super class)没有将 DOM 事件连接到函数,那么您需要建立连接。

dojo.declare("W1", [dijit._Widget], {
label: 'defaultLabel'
, postCreate: function () {
this.inherited(arguments);
dojo.create('div', {innerHTML: 'defaultLabel'}, this.domNode)
this.connect(this.domNode, "onclick", "onClick");
}
});

关于javascript - 为什么我不能将我的事件处理程序放在我的 Dijit 小部件的类声明中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6713442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com