Domanda

Un disegno comune che ho con GWT è quello di creare un widget che contiene due figli:. A e B

Dichiaro questi due widget A e B nel file uibinder associato al mio widget di principale.

Quello che voglio fare è di caricare o meno widget di A seconda un'istruzione if.

approccio ideale è quello di impostare previsto = true per widget di A e di serie widget di A su null quando voglio, non caricare questo widget. Ma GWT genera un errore.

C'è un modo per dichiarare widget in uibinder e poi non li si carica?

grazie

EDIT: dopo un sacco di discussioni, un approccio ideale è quello dichiarato un campo "a condizione = true" e "facoltativi = true" quando opzionale = true, createAndBindUI non deve generare un'eccezione se il campo è nullo. Questo è un approccio pulito.

Se si pensa che questa funzione deve esiste in GWT, si prega di stella questo numero: http://code.google.com/p/google -Web-toolkit / temi / dettaglio? id = 5699

Modifica. 2: utilizzando la LazyPanel come descritto da Thomas sembra essere un modo migliore per gestire questa situazione

È stato utile?

Soluzione

mi sono imbattuto sulla questione GWT, che mi ha portato qui, ecco il mio prendere su di esso, 20 mesi più tardi.

Usa un LazyPanel e impostarlo per visible="false" in modo che il suo contenuto non è costruito fino a quando ne avete bisogno (è sufficiente chiamare setVisible(true) di rivelarlo, triggerring i pigri-inizializzazione del suo contenuto.

LazyPanel è completamente integrato con UiBinder in modo che si dichiara il suo contenuto nello stesso modello UiBinder, come se si trattasse di un SimplePanel, senza nemmeno preoccuparsi di creare una sottoclasse di LazyPanel. Vedere https://developers.google.com/web-toolkit/doc/2.4/DevGuideUiBinder#Lazy

Altri suggerimenti

Vorrei tornare la logica. Se non è necessario il widget elimina

widget.removeFromParent();

Credo che sia un approccio più pulito, dal momento che l'UIBinder definisce automaticamente e li crea.

Dal momento che i condizionali non sono consentiti in un XML UiBinder Io suggerirei di definire segnaposto (ad esempio, pannelli) nel vostro ui.xml, avere un riferimento nella classe di visualizzazione e c'è decidere se una specifica widget di deve essere creato e ha aggiunto o meno.

Si tratta di un approccio comune quando usando il modello MVP con i presentatori nidificate.

EDIT:

Fino a quando la richiesta è stata implementata dagli sviluppatori GWT si potrebbe estendere il FlowPanel e sovrascrivere il metodo add(Widget) per verificare null come in:

public class ExtendedFlowPanel extends FlowPanel {

    public ExtendedFlowPanel() {
        super();
    }

    @Override
    public void add(Widget w) {
        if (w != null) {
            super.add(w);
        }
    }
}

In questo modo è possibile utilizzare provided = true e passare null al pannello.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top