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.

Responder a