可以't在自定义dojo小部件内分配onclick事件
can't assign onclick event inside a custom dojo widget
我有一个自定义小部件,定义如下:
dojo.declare('myWidget', [dijit._WidgetBase, dijit._Templated],
{
'templateString':'<span>' +
'<a dojoAttachPoint="linkNode" href="blah.php">' +
'<img class="thumbNail" src="blahthumb.php" />' +
'</a>' +
'<h4 dojoAttachPoint="title" class="title">${blahtitle}</h4>' +
'</span>',
'stuff':null,
'startup':function()
{
dojo.connect(this.linkNode, 'onclick', function(e){dojo.stopEvent(e);alert('hi');});
}
});
正如您所看到的,我正试图在自定义小部件的一部分上分配一个onclick事件。我正在以编程方式创建小部件,并将其推到类似于以下的页面上:
...
f = new myWidget(stuff);
f.startup();
li = dojo.create('li', {'class':'thingy'});
dojo.place(f.domNode, li);
dojo.place(li, this.gallery); // within another widget,
...
不幸的是,在启动方法中连接的onclick事件没有启动。我试着用各种方式分配它,但似乎都不起作用。
我做错什么了吗?
我不能确定为什么您的案例不起作用,可能是因为您没有通过在方法末尾添加this.inherited(arguments);
来将方法调用传播到启动。
然而,在你的情况下,我认为另一种方法可能更合适。除了您显然知道的dojoAttachPoint
的功能之外,dojo还有dojoAttachEvent
。我建议你这样做:
dojo.declare('myWidget', [dijit._WidgetBase, dijit._Templated],
{
'templateString':
'<span>' +
'<a dojoAttachEvent="onClick:_linkNodeClick" href="blah.php">' +
'<img class="thumbNail" src="blahthumb.php" />' +
'</a>' +
'<h4 dojoAttachPoint="title" class="title">${blahtitle}</h4>' +
'</span>',
'stuff':null,
'_linkNodeClick':function(e){
dojo.stopEvent(e);
alert('hi');
}
});
编辑
好吧,我现在自己试过了,并设法让它像这样工作:
dojo.provide("MyWidget");
dojo.declare('MyWidget', [dijit._Widget, dijit._Templated],
{
'templateString':
'<span>' +
'<a dojoAttachPoint="linkNode">' +
'<img class="thumbNail" src="blahthumb.php" />' +
'</a>' +
'<h4 dojoAttachPoint="title" class="title">${blahtitle}</h4>' +
'</span>',
'startup':function()
{
dojo.connect(this.linkNode, 'onclick', function(e){dojo.stopEvent(e);alert('hi');});
}
});
为了启动它,我必须在调用启动之前将它附加到DOM。
var f = new MyWidget();
dojo.body().appendChild(f.domNode);
f.startup();
我从你原来的版本中修改的唯一一件事就是添加dojo.profile(…),我不知道这是否真的很重要。然后我使用了_Widget而不是_WidgetBase。然后也像我提到的那样改变顺序。现在,当我点击图片时,它会提醒"嗨",然后链接就不会被关注了。
我终于想通了。这与我如何构建小部件无关,而是我正在运行的一个函数,它会在小部件运行后立即修改它。不确定它为什么导致onclick事件消失,但它正在修改一些小部件的dom节点的innerHTML属性。当我评论这一部分时,一切都很顺利。
相关文章:
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 在循环中分配json值时,值被覆盖
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 动态分配GA增强型电子商务跟踪器
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 在输入字段中将最小金额设置为
- 如何在jQuery中将函数的输出分配给变量
- 砌体不能填补小缺口
- 为集合分配大量的模型弹药
- CSS-若窗口太小,滚动条会出现在“表格”单元格上
- 限制javascript变量的最小/最大整数
- onclick函数需要双击,因为类分配延迟
- HTML5在画布中加载较小的图像并保存实际大小的图像
- Javascript 将变量分配给警报
- 最小化时暂停Javascript动画
- 如何正确实现Jquery多选小部件
- ES6 对象分配部分项
- 可以't在自定义dojo小部件内分配onclick事件
- 通过消除最小的用户,将值分配给小于Max的其他值