来自Sencha GXT Grid的MouseOutEvent?

时间:2015-04-08 12:25:03

标签: gwt mouseevent gxt

当鼠标离开网格时需要捕获MouseOutEvent。试过这个:

grid.addHandler(new MouseOutHandler() {
    @Override
    public void onMouseOut(MouseOutEvent event) {
        ...
    }
}, MouseOutEvent.getType());

但它会触发网格中的每个单元格。有什么帮助吗?

2 个答案:

答案 0 :(得分:0)

首先,请改用addDomHandler

grid.addDomHandler(new MouseOutHandler() {
    @Override
    public void onMouseOut(MouseOutEvent event) {
        ...
    }
}, MouseOutEvent.getType());

区别在于addHandler没有将事件连接到dom,但addDomHandler确实如此。这个似乎并不总是需要,因为一旦事件连线,就不需要再做了,但作为一个好的做法,每次你向一个小部件添加一个dom事件处理程序时,你应该< em>始终使用addDomHandler(或直接致电sinkEvents等)。


好的,真正的问题是,有太多的事件正在发生,而不仅仅是一般的'鼠标离开网格'事件。

要处理此问题,请检查事件的eventTarget是否是网格自己的元素。您收到许多事件,因为您获得了网格中每个元素的所有mouseout事件,但只需要将其过滤到您感兴趣的特定元素。

这看起来像这样:

grid.addDomHandler(new MouseOutHandler() {
    @Override
    public void onMouseOut(MouseOutEvent event) {
        //check event target of the event
        Element target = (Element) event.getNativeEvent().getEventTarget();
        if (grid.getElement().equals(target) {
            // the mouse has left the entire grid
            // ...
        }
    }
}, MouseOutEvent.getType());

答案 1 :(得分:0)

解决方案来自jQuery通过JSNI:

private native void addMouseLeaveHandler(Element element) /*-{
        $wnd.$(element).mouseleave(function(){
             ....
        });
    }-*/;