Archiwum kategorii ‘mxml’

Listy, itemRenderer i RadioButton

środa, Sierpień 8th, 2007

Flex i jego item renderery to fajna sprawa, ale dzisiaj w robocie natrafiliśmy na niezłą zagwozdkę. Tak jak w przypadku check boxów nie ma problemu, żeby zmienić wartość aktualnego obiektu (dostęp poprzez właściwość data), tak w przypadku radio sprawy się komplikują. Każda lista może mieć aktualnie zaznaczony tylko jeden przycisk radio, wiadomo. Tak jak dużym problemem nie jest przekazanie do itemrenderera wspólnej grupy RadioButtonGroup, to sprawy komplikują się przy zarządzaniu kolekcją danych. Aktualny element przypisany item rendererowi możemy łatwo zmienić przy pomocy interfejsu IDataRenderer w następujący sposób: data.pole = wartość, ale kto zmieni poprzednio zaznaczoną? Ponieważ tu leżał główny problem.

W pracy mocno przekombinowałem z zewnętrznymi plikami klas, podczas gdy na spokojnie, w domu udało się to przepisać do jednego pliku MXML. Ok, może też trochę przegiąłem, bo trochę się tu kaszany zrobiło, ale tak jak w przypadku dwudziestopięcio linijkowej przeglądarki i tu chciałem upchnąć wszystko w jednym pliku, żeby można było łatwo stosować metodę kopiego-pejsta.

Przy okazji było to też małe ćwiczonko do inline'owych komponentów. Całkiem miłe to, chociaż trochę mniej wydajne, niż "prawdziwy" komponent we własnym pliku AS. Cały sekret leży w MXMLowym komponencie, który dziedziczy po RadioButtonGroup i nadpisuje jej metodę setSelection. Niestety jakoś nie mogę go zmusić do zobaczenia przestrzeni nazw mx_internal z frameworka, dlatego musiałem użyć "hacka":

Actionscript:
  1. namespace mx_internal = "http://www.adobe.com/2006/flex/mx/internal";

Może ktoś ma lepszy pomysł? W każdym razie całość poniżej:

[Kod RadioButton ItemRenderer MXML w załączniku, bo jak zwykle się coś sra z kolorowaniem składni]

Przy okazji, gdyby okazało się , że przekombinowałem i da się to łatwiej zrobić to proszę o info na mejla, lub w komentarzu.