Я не могу с уверенностью сказать, почему ваш случай не работает, возможно, это потому, что вы не передаете вызов метода при запуске, добавляя 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.provide (...), и я не знаю, действительно ли это было важно. Тогда я использовал _Widget вместо _WidgetBase. А затем также измените порядок, как я уже упоминал. Теперь, когда я нажимаю на изображение, появляется предупреждение «Привет», а затем ссылка не переходит.