Quiero eliminar un controlador de eventos GWT la primera vez que recibo un evento. También quiero evitar contaminar mi clase con el seguimiento de objetos de registro que no son realmente necesarios. Actualmente lo tengo codificado como:GWT removeHandler en la notificación del primer evento
final HandlerRegistration[] registrationRef = new HandlerRegistration[1]; registrationRef[0] = dialog.addFooHandler(new FooHandler() { public void onFoo(FooEvent event) { HandlerRegistration removeMe = registrationRef[0]; if(removeMe != null) { removeMe.removeHandler(); } // do stuff here } });
pero el uso de registrationRef hace que el código sea menos legible. ¿Hay una mejor manera de hacerlo sin agregar variables a mi clase?
Sí, Gracias. Supongo que este es el camino a seguir cuando solo tienes uno de estos oyentes en una clase (las cosas se vuelven más complicadas cuando tienes una cantidad arbitraria de widgets que estás tratando de esta manera). Esperaba que hubiera una forma de hacerlo sin agregar un nuevo campo. Oh, bueno ... – Keith
Esto puede no ser tan sencillo como parece. Tengo un caso donde el controlador está configurado como nulo en el método onXXX(). ¿Por qué? Porque no hay nada que impida que GWT llame al controlador de inmediato. Por ejemplo, en el caso de IE en Image.onLoad(), si la imagen ya está cargada, puede llamar al controlador realmente durante la llamada addLoadHandler(). Encontré en ese caso que la única solución era envolver un cheque "si nulo", luego limpiarlo más tarde. – John
Esto no funciona si el controlador se puede agregar varias veces. – ubiquitousthey