我读了这篇文章(Using 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 和一个 inner 组成的。如果我使用 data-dojo-id 指定的 id,它将指向 a 而不是我希望事件绑定的那个。
我找到了一个可以摆脱这种情况的解决方案,
behavior.add({
"[widgetid='myButton'] input": {
onclick: buttonHandler
}
}
但是 css 选择器太复杂了,它取决于小部件是什么类型。
有没有像在 dom 节点上一样在小部件上应用 dojo/behavior 的好解决方案?