Erro ao acionar acao via script

1 resposta
fabioebner

PEssoal alguem pode me falar aonde esta dando erro nesse codigo por favor?

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="66" height="450" backgroundColor="#282828" verticalGap="0">
	<mx:Script>
		<![CDATA[
			[Bindable]
			private static var painelAumentar:String="";
			[Bindable]
			private static var painelDiminuir:String="{vbCesafis}";

			public function selecionarOpcao(evento:Event):void
			{
				painelAumentar=evento.target.id;
				movePaineis.play();
				painelDiminuir=evento.target.id;
			}
		]]>
	</mx:Script>
	<mx:Parallel id="movePaineis" targets="{[painelAumentar, painelDiminuir]}">
		<mx:Resize id="aumenta" heightFrom="50" heightTo="300" target="{painelAumentar}"/>
		<mx:Resize id="diminui" heightFrom="300" heightTo="50" target="{painelDiminuir}"/>
	</mx:Parallel>
	<mx:VBox width="100%" height="300" backgroundColor="#282828" borderStyle="solid" borderColor="#2B2A2A" borderThickness="2" horizontalAlign="center" id="vbCesafis" verticalGap="0"
			 click="selecionarOpcao(event)">
		<mx:Image source="imagens/1553_128x128.png"/>
		<mx:Image height="250" width="60" source="imagens/CesafisImage.png"/>
	</mx:VBox>
	<mx:VBox width="100%" height="50" backgroundColor="#282828" borderStyle="solid" borderColor="#2B2A2A" borderThickness="2" horizontalAlign="center" id="vbProfissional" verticalGap="0"
			 click="selecionarOpcao(event)">
		<mx:Image source="imagens/8435_128x128.png"/>
		<mx:Image height="250" width="60" source="imagens/ProfissionalImg.png"/>
	</mx:VBox>
	<mx:VBox width="100%" height="50" backgroundColor="#282828" borderStyle="solid" borderColor="#2B2A2A" borderThickness="2" horizontalAlign="center" id="vbExtras" verticalGap="0"
			 click="selecionarOpcao(event)">
		<mx:Image source="imagens/1553_128x128.png"/>
		<mx:Image height="250" width="60" source="imagens/ExtrasImagem.png"/>
	</mx:VBox>
	<mx:VBox width="100%" height="50" backgroundColor="#282828" borderStyle="solid" borderColor="#2B2A2A" borderThickness="2" horizontalAlign="center" id="vbAcompanhamento" verticalGap="0"
			 click="selecionarOpcao(event)">
		<mx:Image source="imagens/8435_128x128.png"/>
		<mx:Image width="60" height="250" source="imagens/AcompanhamentoImage.png"/>
	</mx:VBox>

</mx:VBox>

ele retorna o seguinte erro:

TypeError: Error #1006: value não é uma função.
at mx.effects::EffectInstance/play()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\effects\EffectInstance.as:584]
at mx.effects.effectClasses::CompositeEffectInstance/play()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\effects\effectClasses\CompositeEffectInstance.as:172]
at mx.effects.effectClasses::ParallelInstance/play()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\effects\effectClasses\ParallelInstance.as:151]
at mx.effects::EffectInstance/startEffect()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\effects\EffectInstance.as:569]
at mx.effects::Effect/play()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\effects\Effect.as:930]
at br.com.cesafis.components::Menu/selecionarOpcao()[D:\Java\CursoFlex\projetos\CESAFIS\flex_src\br\com\cesafis\components\Menu.mxml:13]
at br.com.cesafis.components::Menu/__vbProfissional_click()[D:\Java\CursoFlex\projetos\CESAFIS\flex_src\br\com\cesafis\components\Menu.mxml:28]

Obrigado

1 Resposta

Bruno_Sales

Vamos la.

Existem uma série de erros em seu código:

  1. A propriedade target de qualquer efeito, ela deve ser preenchida com um Object, que por sua vez, deve ser um componente visual. Na sua atribuição, você está tentando associar uma String a esse valor.

  2. Suas variáveis são staticas sem nenhuma razão aparente. Isso faz elas consumirem memória em tempo desnecessário e ainda causar problemas caso essa tela seja instaciada em 2 lugares diferentes.

  3. Não é possível fazer bindable via actionScript. var painelDiminuir:String="{vbCesafis}"; não vai funcionar. Para usar o bindable via actionScript procure mais sobre BindUtils.

  4. Se você preenche o targets de um agregador de evento, como o Parallels e o Sequence, significa que todos os efeitos dentro deles serão aplicados para todos esses targets. No seu caso, você quer aplicar 1 efeito em 1 painel e outro efeito em outro painel. Logo, o targets do seu Parallel não esta correto. O item 1 se aplica a essa propriedade também.

  5. Além disso, você possui variáveis e bindables desnecessários para sua aplicação. Lembrando que o processo de bind é custoso e pode tornar sua aplicação lenta caso não seja usado de forma correta.

Pronto, agora vou para a solução:

  1. Simplesmente remova as variáveis painelAumentar e painelDiminuir da sua aplicação.
  2. Remova os targets do Parallel e o target do resize aumenta.
  3. No target do painel diminui, deixei o primeiro painel que é exibido na sua aplicação. (Ele é por padrão o primeiro painel a ser diminuído, certo?)
  4. Modifique sua função para o código abaixo.

aumenta.target = event.currentTarget;
movePaineis.play();

  1. No seu endEffect do Resize diminui, chame uma função que faça o seguinte.

diminui.target = aumenta.target;

Com isso, toda vez que terminar o efeito, o seu ultimo painel aberto estará no target do efeito diminui, e seu target de aumentar será trocado toda vez que clickarem no seu container.

Sugiro a você dar uma estudada melhor em flex. Ler alguns livros mais básicos para tirar melhor proveito da linguagem.

Criado 17 de outubro de 2009
Ultima resposta 19 de out. de 2009
Respostas 1
Participantes 2