2012-08-07 58 views
1

我读过这篇文章(Using dojo.behavior),并且想要在我的项目中使用behavior模块作为事件处理模块。如何在dojo小部件上使用dojo /行为?

但我有一个问题,对于DOM节点来说,它的工作很棒,但我怎么能在Dojo小部件上使用它呢?

如果我使用道场/模块上,我能做到这样的:

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,它将指向一个,而不是我希望事件绑定的那个。

我发现了一个解决方案,它能够走出这种情况,

behavior.add({ 
    "[widgetid='myButton'] input": { 
    onclick: buttonHandler 
    } 
} 

但CSS选择器太复杂,这取决于部件是什么类型。

是否有一个很好的解决方案,就像在DOM节点上应用dojo /行为的小部件?

回答

0

它看起来像你真正在挂钩widget对象上的事件,但behavior被设计为访问DOM。所以,我认为你被困在你的解决方法中。

+0

是的。你所说的正是我面临的问题。你有什么好的解决方案? – Programus 2012-10-19 04:35:49