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 version="1.0" encoding="utf-8"?>
-
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*" layout="absolute">
-
-
<mx:Component className="MojaKlasa">
-
<mx:Canvas>
-
<mx:String id="text"></mx:String>
-
<mx:Label text="{text + ' (z innej beczki)'}"/>
-
</mx:Canvas>
-
</mx:Component>
-
-
<local:MojaKlasa text="{inputText.text}" y="10" x="10"/>
-
<mx:TextInput id="inputText" text="Wpisz coś..." y="30" x="10"/>
-
-
</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:
-
<mx:Component className="MojaKlasa">
-
<mx:Canvas>
-
<mx:Script>
-
<![CDATA[
-
public function get text ():String
-
{
-
return lbl.text;
-
}
-
public function set text (text:String):void
-
{
-
lbl.text = text+' (z innej beczki)';
-
}
-
]]>
-
</mx:Script>
-
<mx:Label id="lbl" text="{text}"/>
-
</mx:Canvas>
-
</mx:Component>