我们编写了一个浏览器插件。它触发像“mycustomevent”这样的自定义事件。我需要将这些自定义事件合并(即为其分配侦听器)到 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 接口,以及定义了扩展 HasHandlers 的 HasMyCustomEventHandler 接口,但是在将它们全部连接起来之后,我什么也没得到。为简洁起见,我省略了它们,我很乐意添加任何可能有帮助的内容。
我可以在裸 js 中添加事件侦听器。
obj.addEventListener("mycustomevent", function(){ foo(); }, false);
并每次都捕获事件(foo()被调用),所以我确信事件被触发了。
我已经尝试将以下内容添加到我的 PluginObject 类中,但这只是我从我发现的搜索内容中猜测的。它没有奏效。
public HandlerRegistration addMyCustomEventHandler(MyCustomEventhandler handler){
return handlerManager.addHandler(MyCustomEvent.TYPE, handler);
}
这里的正确方法是什么?