Nous avons codé un plugin de navigateur. Il déclenche des événements personnalisés tels que 'mycustomevent'. Je dois incorporer (c'est-à-dire affecter des auditeurs pour) ces événements personnalisés dans GWT. Voici ma classe de plugin dans GWT.événements de plugin personnalisés dans 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();
}
}
Voici comment je l'ajoute dans ma vue (j'utilise gwtp). Il est ajouté et fonctionne correctement dans la page et je peux appeler ses fonctions js de gwt avec JSNI.
@Inject
public MyPageView(){
...
plugin = new PluginObject();
panel.add(plugin);
}
Je dois pouvoir affecter des gestionnaires pour les événements déclenchés par le plugin. Je voudrais être en mesure de faire ce qui suit dans mon présentateur, mais jusqu'à présent, j'ai été incapable de le brancher.
@Override
protected void onBind(){
super.onBind();
registerHandler(getView().getPluginObject().addMyCustomEventHandler(
new MyCustomEventHandler() {
@Override
public void onMyCustomEvent(MyCustomEvent event) {
// call some other presenter stuff here...
}
}));
}
Ce qui précède mentionne quelques classes supplémentaires. J'ai une classe MyCustomEvent définie, une interface MyCustomEventHandler qui étend EventHandler défini, et une interface HasMyCustomEventHandler qui étend HasHandlers défini mais après les avoir tous câblés, je n'ai rien. Je les ai omis pour la brièveté, je serais heureux d'ajouter quelque chose qui pourrait aider.
Je peux ajouter des écouteurs d'événement dans js.
obj.addEventListener("mycustomevent", function(){ foo(); }, false);
et attraper l'événement (foo() est appelée) à chaque fois, donc je suis confiant que les événements sont tirés.
J'ai essayé d'ajouter ce qui suit à ma classe PluginObject, mais c'est juste que je devine des choses que j'ai trouvées en train de chercher. Cela n'a pas fonctionné.
public HandlerRegistration addMyCustomEventHandler(MyCustomEventhandler handler){
return handlerManager.addHandler(MyCustomEvent.TYPE, handler);
}
Quelle est la bonne approche ici?