Mam problem podczas tworzenia ViewStack, zrepeater wraz z innymi komponentami (tj. vBox) wewnątrz ViewStack. Repeatery zostaną umieszczone na dole widoku. Pomimo, że repeater jest wymieniony przed innymi komponentami, jest umieszczony na dole.
Czy istnieje obejście, w którym można uzyskać repeater narysowany przed innymi komponentami?
Przeszukałem go i ktoś inny zadał to samo pytanie na innej stronie, ale nikt nie odpowiedział. Wklejam przykładowy kod ze swojego wpisu. Wzmacniacz jest wyciągany na końcu.
Dzięki
Oto przykład:
<mx:ViewStack id="viewStack" width="100%" height="100%" backgroundColor="#FFFFFF"
backgroundAlpha="1" paddingLeft="5" paddingRight="5" paddingBottom="5">
<mx:Repeater id="editorsRP" dataProvider="{dynamicFields}"
repeatEnd="organizeViewStack();" width="100%" height="100%">
<editor:DynamicFieldEditor label="{FieldGroup(editorsRP.currentItem).name}"
width="100%" height="100%" fields="{FieldGroup(editorsRP.currentItem).fields}" dataProvider="{details}" />
</mx:Repeater>
<editor:NotesEditor id="notesEditor" width="100%" height="100%" label="Notes"
enabled="false" notesProvider="{attachment}" />
</mx:ViewStack>
Odpowiedzi:
2 dla odpowiedzi № 1Uważam, że problem polega na tym, że dataProvider
ma ustawioną / zmienioną wartość.
Nie jest to pokazane w powyższym kodzie, więc jest trudnewiedzieć. Jednak zawsze, gdy wartość tego zostanie zmieniona, istniejące dzieci utworzone przez repeater zostaną usunięte z rodzica, a nowe zostaną dodane.
Jeśli dzieci programu ViewStack zostały już utworzone, wówczas dzieci z repetytora zostaną umieszczone za istniejącymi dziećmi.
Na przykład:
<mx:TabNavigator width="500">
<mx:VBox label="Static 1" />
<mx:Repeater dataProvider="{["a","b","c"]}">
<mx:VBox label="From repeater" />
</mx:Repeater>
<mx:VBox label="Static 2" />
</mx:TabNavigator>
W tym przypadku parametr dataProvider jest ustawiany podczas inicjowania repeatera, więc karty pojawiają się w kolejności:
¦ Static 1 ¦ From Repeater ¦ From Repeater ¦ From Repeater ¦ Static 2 ¦
Jednak jeśli wartość dataProvider ulegnie zmianie(lub dataProvider wywoła kolekcję CollectChangeEvent), wtedy 3 przekaźniki potomne zostaną usunięte i dodane zostaną nowe dzieci. Zostawiłoby to kolejność tabulacji:
¦ Static 1 ¦ Static 2 | From Repeater ¦ From Repeater ¦ From Repeater ¦
Zauważyłem, że jesteś podłączony organizeViewStack
metoda do repeatEnd
obsługa zdarzeń - chociaż kod metody nie jest wyświetlany.
Wygląda to na najlepszy sposób zarządzania tym - przetasowanie kolejności dzieci po ich ustawieniu.
0 dla odpowiedzi nr 2
Zgaduję trochę, ale
Wszystkie dzieci należące do ViewStack muszą być kontenerem: Repeater nie jest kontenerem, więc umieszczenie go jako dzieci w ViewStack jest nieistotne, ponieważ do wszystkich celów i celów jest ignorowane.
Jednakże, gdy wykonywany jest repeater, tworzy grupę kontenerów i dodaje je do rodzica (AKA ViewStack); dając im inną kolejność Z niż to, czego można się spodziewać po kodzie.
Próbujesz stworzyć wiele różnych dzieci w ViewStack? A może spodziewasz się, że "DynamicFieldEditors" zostaną jakoś ułożone?