为什么不能把事件处理程序放在Dijit小部件的类声明上呢?
Why can't I put my event handler on the class declaration for my Dijit widget?
如果我在实例化小部件时定义点击处理程序:
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
事件后自动调用。
为什么会发生这种情况,这是正常的吗?为我的小部件类定义事件处理程序的"标准方式"是什么?
edit: code for W1:
dojo.declare("W1", [dijit._Widget, dijit._Templated], {
label: 'defaultLabel',
templateString: '<div>${label}</div>'
});
您需要在模板化的小部件中定义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");
}
});
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 在输入字段中将最小金额设置为
- 直接在函数声明上使用function.prototype.bind
- 砌体不能填补小缺口
- CSS-若窗口太小,滚动条会出现在“表格”单元格上
- 限制javascript变量的最小/最大整数
- 获取HTML属性中CSS声明的值
- HTML5在画布中加载较小的图像并保存实际大小的图像
- 对API数据使用声明性绑定
- 最小化时暂停Javascript动画
- 如何正确实现Jquery多选小部件
- 微笑时间轴小部件添加自定义字段
- 如何在Symfony2中的表单小部件中包含javascript
- 重新初始化(或重新声明)Dojo小部件
- Dojo:用Options以声明方式定义类似Select的小部件
- 如何从Dojo声明性小部件访问本地变量
- 如何编写我的小部件而不用在dojo.ready中声明它的代码
- 当以编程方式实例化小部件时,Dojo重复ID错误,但不是以声明方式
- 为什么不能把事件处理程序放在Dijit小部件的类声明上呢?