我們編寫了一個瀏覽器插件。它觸發了像'mycustomevent'這樣的自定義事件。我需要將這些自定義事件合併(即分配偵聽器)到GWT中。這是我在GWT中的插件類。GWT中的自定義插件事件
class PluginObject extends Composite implements HasMyCustomEventHandler{
private Element plugin;
private HTML html;
private HandlerManager handlerManager;
public PluginObject(){
handlerManager = new HandlerManager(this);
html = new HTML("<object id='plugin0' type='application/x-ourplugin' width='300' height='300'>"
+"<param name='onload' value='pluginLoaded' />"
+"</object>");
initWidget(html);
plugin = html.getElement().getFirstChildElement();
}
}
這是我如何將它添加到我的視圖(我正在使用gwtp)。它正在被添加並且在頁面中正常運行,我可以使用JSNI從gwt調用它的js函數。
@Inject
public MyPageView(){
...
plugin = new PluginObject();
panel.add(plugin);
}
我需要能夠爲插件觸發的事件分配處理程序。我希望能夠在演講者中做到以下幾點,但迄今爲止我一直無法將其連接起來。
@Override
protected void onBind(){
super.onBind();
registerHandler(getView().getPluginObject().addMyCustomEventHandler(
new MyCustomEventHandler() {
@Override
public void onMyCustomEvent(MyCustomEvent event) {
// call some other presenter stuff here...
}
}));
}
上面提到了一些額外的類。我定義了一個MyCustomEvent類,一個擴展了EventHandler的MyCustomEventHandler接口,以及一個擴展了HasHandler的HasMyCustomEventHandler接口,但是將它們連接起來後我什麼也得不到。爲了簡潔,我省略了它們,我很樂意添加任何可能有所幫助的內容。
我可以在裸露的js中添加事件偵聽器。
obj.addEventListener("mycustomevent", function(){ foo(); }, false);
每次都抓住事件(foo()被調用),所以我相信事件正在被解僱。
我已經嘗試添加以下到我的PluginObject類,但這只是我從我發現搜索的東西猜測。它沒有奏效。
public HandlerRegistration addMyCustomEventHandler(MyCustomEventhandler handler){
return handlerManager.addHandler(MyCustomEvent.TYPE, handler);
}
這裏的正確方法是什麼?