2011-09-12 6 views
10

In uno scenario di programmazione, avevo bisogno di controllare se la mia casella di testo GWT era focalizzata o meno. Ho finito per aggiungere un booleano e un paio di Focus & BlurHandler per mantenere manualmente lo stato di messa a fuoco che mi fa chiedere perché non esiste un metodo che ritorna se un componente focalizzabile è focalizzato in gwt?Perché non c'è isFocused() in GWT?

+1

Nessuno qui può rispondere a questo. A meno che uno dei ragazzi di Google che lo ha progettato sia venuto fuori, il che sarebbe abbastanza improbabile. –

+2

Sono circa più di quanto pensi –

+0

Cosa c'è di sbagliato nell'usare un FocusHandler? – helpermethod

risposta

11

Perché non c'era alcun modo di utilizzare il browser fino a qualche anno fa (Firefox 3, Safari 4, per puntare gli ultimi giocatori nel gioco con il supporto aggiunto document.activeElement).

GWT supporta ancora ufficialmente [1] Safari 3 (credo che il supporto per Safari 2 sia stato deprecato) e forse anche Firefox 2 (nessun plug-in DevMode, ma ciò non significa che il browser non sia supportato: Opera è supportato ma neanche DevMode), quindi non è possibile fornire una funzione simile che possa funzionare in tutti i browser supportati.

Ultimo, ma non meno importante, penso che nessuno abbia mai presentato una richiesta di miglioramento nel tracker dei problemi (non ne ho trovato almeno uno); e come hai detto, puoi farlo già oggi usando FocusHandler/BlurHandler (che funziona con il cross-browser).

[1] http://code.google.com/webtoolkit/doc/latest/FAQ_GettingStarted.html#What_browsers_does_GWT_support? Credo che la pagina sia un po 'obsoleta, in quanto elenca Firefox 1.0, il cui supporto (user.agent = gecko, vs gecko1_8) è stato rimosso in GWT 2.1.0, e non elenca IE9, il cui supporto ha stato aggiunto in GWT 2.3.0, e, ultimo ma non meno importante, credo che solo l'ultima versione di Opera è supportato, considerando che l'elenco parla di Opera 9.

+0

Per una visione più ampia di quali browser lo supportano, vedere ad esempio MDN: https://developer.mozilla.org/en-US/docs/Web/API/document.activeElement Oggi, sembra che tutti i principali browser lo supportino (IE 4+, Chrome 2+, ecc.), Quindi è abbastanza sicuro utilizzarlo. – PhiLho

1

Per trovare quale widget ha messa a fuoco, io non so se hai già una soluzione. Come un novizio di GWT, propongo la mia soluzione per condividere:

  1. Dichiarare campo privato in oggetto, come gestore focus 'focusedWidget' step 1

  2. Creare per il widget, ecco classe TextBox. Nel blocco OnFocus, assegna il widget a 'focusedWidget'. È possibile aggiungere questo tipo di evento a ogni widget che può essere focalizzato. ! [passaggio 2] [2]

  3. Questo è tutto. Ogni widget che hai associato all'evento focus si imposterà su 'focusedWidget' ogni volta che è focalizzato. Possiamo quindi utilizzare 'focusedWidget' per determinare quale widget corrente è focalizzato. ! [passaggio 3] [3]

Lo collaudo in JUnit, funziona! see image of snippet here Spero che aiuto.

+0

questo è utile, ma sarà necessario aggiungere il gestore di sfocatura anche a ciascun elemento, in modo che la situazione di nessun elemento attualmente focalizzato possa essere rilevata e il valore focusedWidget può essere impostato su null. – Joel