如何在道场小部件上使用道场/行为

How to use dojo/behavior on dojo widget?

本文关键字:行为 小部      更新时间:2023-09-26

我阅读了这篇文章(使用 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。所以,我认为你坚持你的解决方法。