sha*_*sir 13 javascript gwt dom-events
可能是一个愚蠢的问题,但GWT FlowPanel(原始div
元素)不提供处理鼠标点击/鼠标移动的东西.覆盖onBrowserEvent
也不起作用.
如果onclick
使用本机JavaScript 设置事件(需要在之前指定正高度,'div'具有0
未指定的高度),则捕获这些事件正常工作.有没有办法不使用JSNI?
Zwi*_*wik 20
你需要做的是将FlowPanel包装在FocusPanel中.FocusPanel包含所有可能的处理程序,因此可以让您设置ClickHandler.
另一种方法是创建自己的小部件,扩展流动面板并实现必要的界面,以便能够包含ClickHandler.
我个人会推荐第一种方法.它更简单,代码更快,不会减慢您的应用程序速度.
小智 8
实际上,你这样做:
FlowPanel fPanel = new FlowPanel() {
@Override
public void onAttach() {
super.onAttach();
super.addDomHandler(handler, ClickEvent.getType()); // handler is the instance
// of your ClickHandler
}
}
Run Code Online (Sandbox Code Playgroud)
干杯!!!
我找到的最佳解决方案就在这里.
我们的想法是扩展FlowPanel(或实际上是SimplePanel)以实现相关的处理程序接口,这对于不需要FocusPanel的完整功能和焦点功能的情况来说是一个更简洁的选项.见下文:
public class MouseAwareFlowPanel extends FlowPanel implements
HasMouseOverHandlers, HasMouseOutHandlers, HasClickHandlers
{
public HandlerRegistration addMouseOverHandler(MouseOverHandler handler)
{
return addDomHandler(handler, MouseOverEvent.getType());
}
public HandlerRegistration addMouseOutHandler(MouseOutHandler handler)
{
return addDomHandler(handler, MouseOutEvent.getType());
}
public HandlerRegistration addClickHandler(ClickHandler handler)
{
return addDomHandler(handler, ClickEvent.getType());
}
}
Run Code Online (Sandbox Code Playgroud)
这对我有用(显然,用你的点击处理器名称替换"你的CLICKHANDLER"):
FlowPanel field = new FlowPanel();
field.addDomHandler(YOUR CLICKHANDLER, ClickEvent.getType());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8094 次 |
最近记录: |