Javascript 如何在dojo小部件上使用dojo/behavior?

Javascript 如何在dojo小部件上使用dojo/behavior?,javascript,event-handling,dojo,behavior,Javascript,Event Handling,Dojo,Behavior,我阅读了这篇文章(),希望在我的项目中使用该模块作为事件处理模块 但是我有一个问题,对于DOM节点来说,它工作得很好,但是如何在Dojo小部件上使用它呢 如果我使用dojo/on模块,我可以这样做: var buttonNode = dijit.byId("myButton"); on(buttonNode, "onClick", buttonHandler); 或 但是,如果我使用行为模块 behavior.add({ "#myButton": { onClick:

我阅读了这篇文章(),希望在我的项目中使用该模块作为事件处理模块

但是我有一个问题,对于DOM节点来说,它工作得很好,但是如何在Dojo小部件上使用它呢

如果我使用dojo/on模块,我可以这样做:

var buttonNode = dijit.byId("myButton");
on(buttonNode, "onClick", buttonHandler);

但是,如果我使用行为模块

behavior.add({
    "#myButton": {
        onClick: buttonHandler
    }
});
它不起作用。(当然,我在完成页面渲染后调用了behavior.apply() 下面的代码也不起作用

behavior.add({
    "[widgetid='myButton']": {
        onClick: buttonHandler
    }
});
经过一些调查,我发现上面的代码不起作用的原因是一个按钮小部件由多个s和一个内部组件组成。若我使用数据dojo id指定的id,它将指向一个,而不是我希望事件绑定的

我找到了一个可以走出这种局面的解决方案

behavior.add({
  "[widgetid='myButton'] input": {
    onclick: buttonHandler
  }
}
但是css选择器太复杂了,它取决于小部件的类型


有没有一个好的解决方案可以像在dom节点上一样在小部件上应用dojo/行为

它看起来像你真正想要的是在widget对象上连接一个事件,但是
行为
被设计成访问DOM。所以,我认为你被困在你的变通方法中了

对。你说的正是我面临的问题。你有什么好办法吗?
behavior.add({
  "[widgetid='myButton'] input": {
    onclick: buttonHandler
  }
}