Frage

Ich habe eine Verpflichtung auf ein aktuelles Projekt (eine Flex-App, die in Flash Player ausgeführt wird) eine beliebige Teilmenge der Komponenten auf einem Formular anzuzeigen, während alle anderen Komponenten versteckt auf der Grundlage bestimmter Aspekte des Anwendungszustands. Es gibt etwa ein Dutzend verschiedene Textfelder und Drop-downs, aber einige werden irrelevant, basierend auf zuvor eingegebenen Benutzerdaten, und wir wollen nicht mit denen angezeigt wird, wenn wir auf diese besondere Form erhalten. Jedes Mal, das Formular angezeigt wird, konnte ich eine der vielen Permutationen dieser Komponenten zeigen müssen.

Ich versuche zu entscheiden, was der beste Weg, dieses Problem zu nähern. Sollte ich eine Leinwand (oder einen anderen Behälter) mit alle benötigten Bedienelemente auf sie erstellen und dann einfach eingestellt sichtbar = false auf die, die ich nicht brauchen? Das Problem wird dann dafür, dass das Layout anständig aussieht. Ich glaube nicht, es will Lücken sein, wo die versteckten Kontrollen gewesen wären.

Die andere Option, die ich darüber nachgedacht habe, ist nur mit einem Mechanismus, der dynamisch die TextInput- oder CheckBox usw. Komponente instanziiert könnte und dann container.addChild (Kontrolle) aufrufen, um die Komponenten aufzubauen und sich nicht um die Sorgen Lücke Ausgabe.

Dies scheint ein Problem, dass eine idiomatische Lösung in flex hat, aber ich weiß nicht, was es ist. Keine dieser Ideen scheinen groß, so frage ich mich, ob jemand anderes hat eine bessere Idee.

War es hilfreich?

Lösung

Ich weiß nicht, ob dies eine gute Lösung ist oder nicht, aber wenn ich in genau der gleichen Situation war, habe ich im Grunde die erste Methode. Set visible = false und auch eingestellt includeInLayout = false diese „Lücken“ zu verhindern, dass Sie sprechen. Es ist eine sehr einfache Lösung, sehr einfach und schnell zu implementieren ... vielleicht jemand anderes obwohl idiomatischer von etwas mehr weiß.

Andere Tipps

Die beste Vorgehensweise, wie es zu tun ist, Staaten zu verwenden. Zum Beispiel:

<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>

Dann im Code, Sie this.currentState = „State1“ rufen Sie den ersten Zustand usw. Mit Staaten zu ermöglichen, können Sie selektiv zeigen und verbergen Komponenten.

Ich empfehle für flex Staaten Tutorials googeln und einige eine richtige Vorstellung davon, auszuprobieren, wie Staaten arbeiten.

Wenn Staaten nicht tun Besuche Artikel, die den Komponenten-Lebenszyklus zu erklären.

Wenn Sie eine Klasse erstellen, die eine flexible Komponente wie Leinwand erstreckt, finden Sie alle Komponenten in einer Funktion definieren, die create außer Kraft setzen. Sie werden das Layout in einer anderen Funktion erneut die update außer Kraft setzen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top