如果我在实例化我的小部件时定义了我的点击处理程序:
new W2({onClick: a_function});
在postMixinProperies
期间或postCreate
期间
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
个事件后自动调用它。
为什么会发生这种情况,这是正常的,为我的窗口小部件类定义事件处理程序的“标准方法”是什么?
编辑代码:
dojo.declare("W1", [dijit._Widget, dijit._Templated], {
label: 'defaultLabel',
templateString: '<div>${label}</div>'
});
答案 0 :(得分:2)
您需要在模板化小部件中定义attach事件,以将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
});
如果窗口小部件没有模板化,超级类已经将DOM事件连接到名为onClick的函数,那么设置onClick函数就可以了。
dojo.declare("W1", [dijit._Widget, dijit.form.Button], {
label: 'defaultLabel'
});
如果窗口小部件没有模板化并且超级类没有将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");
}
});