Desidero rimuovere un gestore di eventi GWT la prima volta che ricevo un evento. Voglio anche evitare di inquinare la mia classe con oggetti di registrazione di tracciamento che non sono realmente necessari. Al momento l'ho codificato come:GWT removeHandler sulla notifica del primo 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 } });
ma l'uso di registrationRef rende il codice meno leggibile. C'è un modo migliore per farlo senza aggiungere variabili alla mia classe?
Sì, Grazie. Immagino che questa sia la strada da percorrere quando hai solo uno di questi ascoltatori in una classe (le cose si complicano quando hai un numero arbitrario di widget che stai trattando in questo modo). Speravo che ci fosse un modo per farlo senza aggiungere un nuovo campo. Oh bene ... – Keith
Questo potrebbe non essere così semplice come sembra. Ho un caso in cui il gestore è impostato su null nel metodo onXXX(). Perché? Perché non c'è niente che impedisca a GWT di chiamare immediatamente il gestore. Ad esempio, nel caso IE in Image.onLoad(), se l'immagine è già caricata, può chiamare effettivamente il gestore durante la chiamata addLoadHandler(). Ho trovato in quel caso l'unica correzione era di avvolgere in un controllo "se nulla", quindi ripulire più tardi. – John
Questo non funziona se il gestore può essere aggiunto più volte. – ubiquitousthey