Akcesory w inline’owych komponentach.

Gdy zachodzi potrzeba zastosowania tzw. komponentów inline, czasem występuje problem z dostepem do pól komponentu. Nie zawsze chcemy się odwoływać poprzez mojKompo.mojLabel.text, wygodniej byłoby skorzystać z właściwości get/set mojKompo.text. Oczywiście najłatwiej byłoby użyć tagu ddd i tam zdefiniować akcesory. Ale ja czuję parcie na szkło, więc użyje rozwiązania czysto bez-tag<mx:Script>'owego. Zamiast ustawiać "ręcznie", w kodzie można zastosować czyste bindowanie:

XML:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*" layout="absolute">
  3.  
  4.     <mx:Component className="MojaKlasa">
  5.         <mx:Canvas>
  6.             <mx:String id="text"></mx:String>
  7.             <mx:Label text="{text + ' (z innej beczki)'}"/>
  8.         </mx:Canvas>
  9.     </mx:Component>
  10.    
  11.     <local:MojaKlasa text="{inputText.text}" y="10" x="10"/>
  12.     <mx:TextInput id="inputText" text="Wpisz coś..." y="30" x="10"/>
  13.    
  14. </mx:Application>

Tym sposobem możemy zupełnie ukryć implementację komponentu przed samym sobą (idealne dla schizorfeników!), ponieważ mx:Label nie potrzebuje juz pola id. A tak mniej więcej wyglądałaby MojaKlasa z małą pomocą ze strony AS:

XML:
  1. <mx:Component className="MojaKlasa">
  2.     <mx:Canvas>
  3.         <mx:Script>
  4.             <![CDATA[
  5.                 public function get text ():String
  6.                 {
  7.                     return lbl.text;
  8.                 }
  9.                 public function set text (text:String):void
  10.                 {
  11.                     lbl.text = text+' (z innej beczki)';
  12.                 }
  13.             ]]>
  14.         </mx:Script>
  15.         <mx:Label id="lbl" text="{text}"/>
  16.     </mx:Canvas>
  17. </mx:Component>

Dodaj odpowiedź