1

我读了这篇文章(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 的好解决方案?

4

1 回答 1

0

它看起来就像你真正要在小部件对象上连接一个事件,但behavior它被设计为访问 DOM。所以,我认为你坚持使用你的解决方法。

于 2012-10-18T01:44:10.113 回答