Problema com Flex

3 respostas
Andre_Brito

Galera, estou com um problema usando Flex. Eu já tinha esse problema, mas consegui contornar ele fazendo o que precisava de outra forma.

Eu tenho um componente hipotético chamado Thumb, que tem uma Image e um Label. O que eu quero fazer é instanciar esse componente por ActionScript, colocar o text do Label dele com uma String que eu digito e adicionar ele em uma TileList que está dentro de um Panel.

Basicamente, é assim: Panel tem uma TileList e a ControlBar. Quando clicado em um determinado botão na ControlBar, aparece uma PopUp, com um campo. Digitado alguma coisa dentro do campo e dado o ok, eu tenho uma String, que deve ser o nome do componente (não o nome da variável de referência) novo que vai na TileList.

Meu código está assim:
if (textoFoiDigitadoCorretamente() == true)
{
     PopUpManager.removePopUp(this);

     var nome : String = textInputEntrada.text;

     var componente : Thumb = new Thumb();

     componente.labelDele.text = nome;
}
else
{
     // mensagem de erro.
}

O erro que dá na execução é esse:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
, que dá na linha de atribuição do text (componente.labelDele.text = nome).

Eu dei uma procurada, mas não achei nada que fosse parecido. Uma coisa que eu pensei é em fazer o código do Thumb (que é o componente) em ActionScript (ele foi feito usando somente MXML), mas não sei se vai adiantar (não vejo razão pra funcionar também).

Alguém sabe o que pode estar acontecendo?

Abraço.

3 Respostas

JavaKaiser

e ai Andre,

olha, nunca fiz uma aplicação com flex (ainda),
mas pelo seu codigo, algo esta retornando nulo,

o que indica que seu componente nao esta sendo criado

mas como nao tenho como testar esse codigo aqui, fica mais dificil te ajudar mais,

mas tenta debugar, ou colocar um print depois das linhas de atribuição pra saber o que esta nulo.

flw

Andre_Brito

JavaKaiser,

É, é isso mesmo que acontece - o Thumb ainda não foi criado e eu tento acessar uma propriedade dele (que vai ser nula).

A criação dele (ie, o método que fica em creationComplete) é chamado depois de eu adicionar no array (que é o dataprovider da TileList), indicando que o objeto é criado depois.

A

O que ocorre é um componente só é de fato criado depois de adicionado no display list. No mxml isto é transparente, mas quando você usa actionscript vc precisa usar o addChild (como é o que você parece ter percebido).

Para resolver isso você poderia criar uma propriedade Bindable no seu componente e fazer o bind com o seu labelDele. Ou seja, o seu Thumb poderia ter algo mais ou menos assim:

<Script>
[Bindable]
public var myLabel:String;
</Script>

<mx:Label id="labelDele" text="{myLabel}"/>

Então, depois de criar o seu Thumb basta atribuir um valor à propriedade myLabel. Não fiz o teste, mas deve funcionar uma vez que depois de adicionar o componente no display list o SDK do flex excuta os bindings.

[]'s
Beck Novaes

www.dclick.com.br
blog.dclick.com.br

Criado 28 de maio de 2009
Ultima resposta 29 de set. de 2009
Respostas 3
Participantes 3