1- Cria uma propriedade que vais usar como holder do state:

private var _currentViewState:String;

2- Cria um método ou setter para mudares o view state que faz invalidate ao Skin state:

        [Inject("appStateModel.base", bind="true")]
        public function set currentViewState(value:String):void
        {
            if (_currentViewState != value)
            {
                _currentViewState = value;
                invalidateSkinState();
            }
        }

3- Faz override ao getCurrentSkinState(), um método protegido que o Flex usa para decidir qual é que é o estado actual da Skin:


        override protected function getCurrentSkinState():String
        {
            return _currentViewState;
        }


Se não quiseres, não tens que usar o getter (passo 2), ou a propriedade (passo 1) - basta fazeres o invalidateSkinState e depois no getCurrentSkinState fazes a tua lógica para decidir qual é o estado da Skin. Porém, nós preferimos fazer assim porque nós usamos um género de máquina de estados ao nível da aplicacão, à qual todas as Views da aplicacão estão "bindadas" (vê o Inject - isto é Swiz). Desta forma, quando queremos saltar do ecrã A para o C, mudamos o "appStateModel" que irá provocar com que as views invalidem o seu skin state alterando assim os estados (e criando a percepcão de navegacão).


linkedIn <http://pt.linkedin.com/in/jsaleiro> João Saleiro
Chief Technology Officer
Tel:    00351 916 077 097
Email:  [email protected] <mailto:[email protected]>
Skype:  joao.saleiro <callto://joao.saleiro>

Webfuel Solutions <http://www.webfuel.pt> www.webfuel.pt <http://www.webfuel.pt>
Lisbon, Portugal


On 17-06-2011 12:02, Ricardo Araújo wrote:
mais uma pergunta rápida,

na skin tenho varios states, e quero os controlad apartir do
HostComponent...
tentei através do currentState = "novoState"; mas rebenta!!!

On Jun 16, 6:23 pm, João Saleiro<[email protected]>  wrote:
Ricardo (e restantes),

infelizmente (e j� me "queixei" disso � Adobe) o includeIn aparentemente
redesenha as views sempre que se entra num estado. Isto �, da nossa
experi�ncia quando o utilizador entra na view a primeira vez o
utilizador sente uns millisegundos de tempo de espera. Quando entra a
segunda vez, volta a sentir esses millisegundos - que n�o deviam
acontecer. A quest�o � que aparentemente a view j� est� instanciada, mas
o SDK volta a executar o c�digo da layouting (?).

Fizemos testes e mudamos para o visible e includeInLayout em vez do
includeIn. O resultado � que a aplicac�o demora mais a arrancar (a
instanciac�o das views � passada para o arranque), mas a partir da� a
experi�ncia com o utilizador � substancialmente superior, com reac��es
imediatas na navega��o.

Isto s� se nota em views muito complexas, sobretudo quando se utilizam
Forms, Datagrid e/ou muitos item renderers em liquid layout.

Curiosamente, tenho que voltar a testar o includeIn para ver se na
�ltima actualizac�o do SDK j� houveram melhorias neste t�pico.

linkedIn<http://pt.linkedin.com/in/jsaleiro>  Jo�o Saleiro
Chief Technology Officer
Tel:    00351 916 077 097
Email:  [email protected]<mailto:[email protected]>
Skype:  joao.saleiro<callto://joao.saleiro>

Webfuel Solutions<http://www.webfuel.pt>        www.webfuel.pt
<http://www.webfuel.pt>
Lisbon, Portugal

On 16-06-2011 18:05, Ricardo Ara�jo wrote:







(nota: n�s usamos o includeInLayout e o visible neste caso em vez
de
States por quest�es de performance. Mas isso � outra
discuss�o...).
btw,
qual a diferen�a ent�o entre usar o includeInLayout+visible ou o
includeIn? usas na mesma os states... e quando o componente � criado
no includeIn depois continua em memoria!!! ...
On Jun 16, 5:38 pm, Ricardo Ara�jo<[email protected]>    wrote:
J� percebi ... ...
desculpa J.Fernandes, n�o estava a entender.... acaba por ser o mesmo
m�todo que o J.Salgueiro me indicou...
Obrigado ... fico-vos eternamente agradecido ;)
On Jun 16, 5:27 pm, Ricardo Ara�jo<[email protected]>    wrote:
JF, j� me tinha passado pela cabe�a... mas depois a minha class m�e
onde estaria o principal c�digo estaria dentro de um componente que
estende de SkinnableComponent! Seria isto correcto!?
penso que isso traz-me outro problema... se quiser colocar as
atribui��es de skins num css para que possa mudar facilmente o c�digo
que estava dentro da skinnablecomponent ter� que ser duplicado para
outros grupos de skins!
On Jun 16, 5:19 pm, Jo�o Fernandes
<[email protected]>    wrote:
Podes fazer exactamente isso, criar um custom component onde defines novos
skinParts e depois � s� associares uma skin ao mesmo. Se quizeres para o
mesmo custom component v�rios aspectos s� ter�s de definir uma nova skin e
meteres as skinParts onde bem entenderes.
Jo�o Fernandes
2011/6/16 Ricardo Ara�jo<[email protected]>
Ajudou, mas ainda tenho umas d�vidas....
por exemplo:
crio um projecto novo, e na WindowedApplication coloco-lhe dois bot�es
normais<s:Button />    ... depois como � que eu na skin que aplicar ao
WindowedApplication posso definir por exemplo posi��es para cada
bot�o?
(se fosse um SkinnableComponent diria que aquele bot�o era uma
SkinPart)
On Jun 16, 4:57 pm, Jo�o Saleiro<[email protected]>    wrote:
Ricardo,
n�o percebi bem a tua quest�o. N�s aqui resolvemos a quest�o do
multi-skinning com facilidade, usando stylesheets CSS.
Cada theme tem o seu pr�prio CSS que define o aspecto gr�fico de
*todos
e quaisquer* componentes visuais.
A t�tulo de exemplo:
s|Application
{
       skin-class:
ClassReference("com.airgile.crm.skins.petro.views.core.ApplicationSkin");
}
view3|NotificationBox
{
       skin-class:
ClassReference("pt.webfuel.core.ui.notification.view.skin.NotificationBoxSk
in");
}
core|AirgileView
{
       skin-class:
ClassReference("com.airgile.crm.skins.petro.views.core.AirgileViewSkin");
}
s|TextArea
{
       skin-class:
ClassReference("com.airgile.skins.petro.components.textarea.TextAreaSkin");
       focus-alpha: 0;
}
Quando queres mudar o theme, simplesmente trocas o CSS (usando ou n�o
Runtime CSS).
Espero que ajude.
linkedIn<http://pt.linkedin.com/in/jsaleiro>    Jo�o Saleiro
Chief Technology Officer
Tel:    00351 916 077 097
Email:  [email protected]<mailto:[email protected]>
Skype:  joao.saleiro<callto://joao.saleiro>
Webfuel Solutions<http://www.webfuel.pt>          www.webfuel.pt
<http://www.webfuel.pt>
Lisbon, Portugal
On 16-06-2011 16:42, Ricardo Ara�jo wrote:
Boa tarde malta,
Estou aqui a planear uma aplica��o em que pretendo personaliza-la a
n�vel do design para cada cliente.
Aplico uma skin � WindowedApplication e depois queria na pr�pria
skin
aplicar skins doutros componentes que est�o dentro da
WindowedApplication... como fa�o?
provavelmente n�o se faz assim? :) ... � que depois teria que dizer
que um componente declarado em mxml seria uma SkinPart...
Existe por exemplo outro caso de um ecr� em que s�o constru�dos
objectos dinamicamente no componente que estende do
skinnablecomponent. Como fa�o para criar skin parts dinamicamente? e
depois na skin como lido com esses objectos que foram criados?
--
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.
--
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.

<<inline: LinkedIn.gif>>

<<inline: Webfuel.gif>>

Responder a