Imagina o exemplo:
<s:Group id="contentHolder"
left="0" right="0" top="63" bottom="20">
<s:Label id="usernameDisplay" text="{loginView.username}"/>
<users:LoginView id="loginView"
width="100%" height="100%"
includeIn="login"/>
</s:Group>
Imagina que pretendes que o username que seja inserido no loginView seja
exibido no label. Isto é o que se deverá evitar no 4.x, no teu
skinnableComponent deverás escutar o evento "usernameChange" disparado pelo
loginView e copiar o valor para a skinPart que corresponde ao
usernameDisplay.
Basicamente o que o teu componente deverá fazer será:
partAdd( loginView ) > escutar o evento usernameChange
partAdd( usernameDisplay ) > assignar a variavel username à propriedade
text.
no handler do username change fazer username = novo valor.
o setter do username deverá invalidar as propriedades
(invalidateProperties()) e marcar uma flag como usernameChanged = true.
no commitProperties validar se usernameChanged e caso seja verdade, assignar
esse valor ao usernameDisplay.text. Não esquecer de reverter o valor do
usernameChanged = false.
Algo como:
override protected function partAdded(partName:String, instance:Object):void
{
super....
if( instance == loginView)
{
loginView.addEventListener(usernameChanged,
usernameChangeHandler);
}
}
protected function usernameChangeHandler(event:Event):void
{
// poderia ser substituido por um loginViewEvent que teria uma
propriedade username mas para exemplo serve
username = loginView.username;
}
public function set username(value:String):void
{
if(_username == value) return;
_username = value;
usernameChanged=true;
invalidateProperties();
}
override protected function commitProperties():void
{
super.commitProperties();
if(usernameChanged)
{
usernameChanged= false;
if( usernameDisplay)
usernameDisplay.text = username;
}
}
Parece ser muito código mas a lógica é sempre a mesma e permite ter bom
desempenho pois só se actualiza realmente o que é necessário. Usando
bindings arriscaste a ter demasiados eventos PropertyChange que vão ser
executados desnecessariamente levando a uma degradação do desempenho.
João Fernandes
--
Recebeu esta mensagem porque está inscrito no grupo "Mailing List da Comunidade
Portuguesa de Rich Internet Applications - www.riapt.org" dos Grupos do Google.
Para publicar uma mensagem neste grupo, envie um e-mail para
[email protected].
Para anular a inscrição neste grupo, envie um e-mail para
[email protected].
Para ver mais opções, visite este grupo em
http://groups.google.com/group/riapt?hl=pt-PT.