当元素被添加到特定的 DIV 时,GWT 中是否有这样的事情来处理事件?
从这个答案有jQuery解决方案:
$('body').on('DOMNodeInserted', '#common-parent', function(e) {
if ($(e.target).attr('class') === 'myClass') {
console.log('hit');
}
});
当元素被添加到特定的 DIV 时,GWT 中是否有这样的事情来处理事件?
从这个答案有jQuery解决方案:
$('body').on('DOMNodeInserted', '#common-parent', function(e) {
if ($(e.target).attr('class') === 'myClass') {
console.log('hit');
}
});
您可以使用 jsni 集成 jquery 方法。
首先,您需要创建相应的 gwt like 事件:
package com.test.gwt;
import com.google.gwt.event.shared.GwtEvent;
public class DOMNodeInsertedEvent extends GwtEvent<DOMNodeInsertedEventHandler> {
public static Type<DOMNodeInsertedEventHandler> TYPE = new Type<DOMNodeInsertedEventHandler>();
public Type<DOMNodeInsertedEventHandler> getAssociatedType() {
return TYPE;
}
protected void dispatch(DOMNodeInsertedEventHandler handler) {
handler.onDOMNodeInserted(this);
}
}
和 gwt 之类的处理程序:
package com.test.gwt;
import com.google.gwt.event.shared.EventHandler;
public interface DOMNodeInsertedEventHandler extends EventHandler {
void onDOMNodeInserted(DOMNodeInsertedEvent event);
}
然后实现jsni包装功能
public native void addDOMNodeInsertedEventHandler(Widget widget, Element element)/*-{
$wnd.$(element).bind('DOMNodeInserted', function (event) {
var gwtEvent = @com.test.gwt.DOMNodeInsertedEvent::new()();
widget.@com.google.gwt.user.client.ui.Widget::fireEvent(Lcom/google/gwt/event/shared/GwtEvent;)(gwtEvent);
});
}-*/;
最后将您的处理程序添加到相应的面板
FlowPanel flowPanel = new FlowPanel();
flowPanel.addHandler(new DOMNodeInsertedEventHandler() {
@Override
public void onDOMNodeInserted(DOMNodeInsertedEvent event) {
Window.alert("Inserted");
}
}, DOMNodeInsertedEvent.TYPE);
addDOMNodeInsertedEventHandler(flowPanel, flowPanel.getElement());