ブラウザプラグインをコーディングしました。それは '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インターフェース、HasHandlersを定義したHasMyCustomEventHandlerインターフェースを持っています。私は簡潔にそれらを省略しました、私は助けるかもしれない何かを追加してうれしいです。
私はイベントリスナーを裸のjsに追加できます。
obj.addEventListener("mycustomevent", function(){ foo(); }, false);
イベントをキャッチすると(foo()が呼び出されるたびに)、イベントが発生すると確信しています。
私はPluginObjectクラスに以下を追加しようとしましたが、これは私が検索したものから推測しているだけです。それは働いていません。
public HandlerRegistration addMyCustomEventHandler(MyCustomEventhandler handler){
return handlerManager.addHandler(MyCustomEvent.TYPE, handler);
}
ここで適切なアプローチは何ですか?