Domanda

Ho un requisito sul mio progetto attuale (un'app Flex che verrà eseguita in Flash Player) per visualizzare un sottoinsieme arbitrario dei componenti in un modulo nascondendo tutti gli altri componenti in base a determinati aspetti dello stato dell'applicazione. Esistono circa una dozzina di caselle di testo e menu a discesa diversi, ma alcuni diventano irrilevanti in base ai dati dell'utente immessi in precedenza e non vogliamo mostrarli quando arriviamo a questo particolare modulo. Ogni volta che viene visualizzato questo modulo, potrebbe essere necessario mostrare una delle molte permutazioni di questi componenti.

Sto cercando di decidere quale sia il modo migliore per affrontare questo problema. Devo creare un Canvas (o un altro contenitore) con tutti i controlli necessari su di esso e quindi impostare visible = false su quelli che non mi servono? Il problema diventa quindi assicurarsi che il layout appaia decente. Non voglio che ci siano lacune in cui sarebbero stati i controlli nascosti.

L'altra opzione a cui ho pensato è solo avere un meccanismo che potrebbe istanziare dinamicamente il componente TextInput o CheckBox ecc. e quindi chiamare container.addChild (controllo) per costruire i componenti e non doversi preoccupare del problema di gap.

Sembra un problema che ha una soluzione idiomatica in flex, ma non so cosa sia. Nessuna di queste idee sembra eccezionale, quindi mi chiedo se qualcun altro abbia un'idea migliore.

È stato utile?

Soluzione

Non so se questa è una buona soluzione o no, ma quando ero esattamente nella stessa situazione, ho praticamente fatto il tuo primo metodo. Imposta visible = false e imposta anche includeInLayout = false per evitare quelle "quotazioni"; stavi parlando. È una soluzione molto semplice, molto facile e veloce da implementare ... forse qualcun altro sa qualcosa di più idiomatico però.

Altri suggerimenti

Il modo migliore per farlo è usare gli stati. Ad esempio:

<mx:states>
    <mx:State name="State1">
        <mx:AddChild position="lastChild">
            <components.../>
        </mx:AddChild>
    </mx:State>
    <mx:State name="State2">
        <mx:AddChild position="lastChild">
            <mx:Canvas.../>
        </mx:AddChild>
        <mx:AddChild position="lastChild">
            <mx:VBox.../>
        </mx:AddChild>
    </mx:State>
</mx:states>

Quindi nel tuo codice, chiami this.currentState = " State1 " per abilitare il primo stato ecc. Utilizzando gli stati, è possibile mostrare e nascondere selettivamente i componenti.

Consiglio di cercare su google i tutorial sugli stati flessibili e di provarne alcuni per avere un'idea corretta di come funzionano gli stati.

Se gli stati non funzionano, consulta gli articoli che spiegano il ciclo di vita dei componenti.

Se crei una classe che estende un componente flessibile come Canvas, definirai tutti i componenti in una funzione che sovrascrive createChildren. Rivisiterai il layout in un'altra funzione che sovrascrive updateDisplayList

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