我阅读了这篇文章(使用 dojo.behavior),并希望将项目中的行为模块用作事件处理模块。
但是我有一个问题,对于 DOM 节点,它工作得很好,但我如何在 Dojo 小部件上使用它?
如果我使用 dojo/on 模块,我可以这样做:
var buttonNode = dijit.byId("myButton");
on(buttonNode, "onClick", buttonHandler);
或
dijit.byId("myButton").onClick = buttonHandler;
但是,如果我使用行为模块,
behavior.add({
"#myButton": {
onClick: buttonHandler
}
});
它不起作用。(当然,我在完成页面渲染后调用了 behavior.apply()。下面的代码也不起作用。
behavior.add({
"[widgetid='myButton']": {
onClick: buttonHandler
}
});
经过一番调查,我发现上面的代码不起作用的原因是因为按钮小部件由许多 s 和一个内部 .如果我使用 data-dojo-id 指定的 id,它将指向 a 而不是我希望事件绑定的 id。
我找到了一个可以摆脱这种情况的解决方案,
behavior.add({
"[widgetid='myButton'] input": {
onclick: buttonHandler
}
}
但是CSS选择器太复杂了,这取决于小部件的类型。
有没有一个好的解决方案可以在小部件上应用 dojo/行为,就像在 dom 节点上一样?
看起来你真正想要在小部件对象上挂接一个事件,但behavior
被设计为访问 DOM。所以,我认为你坚持你的解决方法。