Por que mx: estados têm ser problema resolvido para uma implementação do componente?

StackOverflow https://stackoverflow.com/questions/369120

  •  21-08-2019
  •  | 
  •  

Pergunta

De vez em quando eu recebo um erro quando eu configurar estados em um arquivo MXML. O erro que recebo diz que mx: estados não poderia ser resolvido para uma implementação de componente

.

Eu li, no seguinte URL, que este problema é causado por componentes estendendo - que de alguma forma joga fora a capacidade do compilador para mx resolve: estados. Eu não vejo por que isso deve ser o caso, mas eu não tenho qualquer resposta da minha própria. Eu também não pode necessariamente fazer este trabalho abordagem com todos os meus componentes prolongados.

http://life.neophi.com/danielr/2007/01 /could_not_resolve_to_a_compone.html

A solução que eu vim acima com é não usar qualquer namespace. Então, o meu código, em seguida, se parece com isso:

<states>...</states>

em vez de:

<mx:states>...</mx:states>

Fazendo esse estranho (pelo menos, para mim) é o fato de que as crianças da tag - - não tem esse problema. mx: estados não pode ser resolvido, mas o seu filho mx: Estado pode. E mx: SetProperty - uma criança de mx:. Estado - é também resolveu

Alguém pode explicar isso, e / ou oferecer uma solução melhor para o problema do que o que eu vim acima com?

A propósito, eu vejo o mesmo problema com mx:. Transições

Foi útil?

Solução

Se você tem um componente personalizado, você provavelmente vai tê-lo em um espaço de nomes diferente de mx . Você está no caminho certo, removendo o espaço de nomes, mas você não tem que fazer isso. Considere o exemplo a seguir

<example:MyComponent xmlns:mx="http://www.adobe.com/2006/mxml"
    xmlns:example="com.example.*">
</example:MyComponent>

Nesse código, temos um componente personalizado com o nome MyComponent no pacote com.example. Agora, como é que vamos adicionar estados personalizados? É fácil!

<example:MyComponent xmlns:mx="http://www.adobe.com/2006/mxml"
    xmlns:example="com.example.*">

    <example:states>
        <mx:State name="CustomState">
        </mx:State>
    </example:states>

</example:MyComponent>

Propriedades de um componente, como estados , transições , ou mesmo rótulo em um botão pode ser criado como elementos filhos. Essas propriedades devem usar o mesmo namespace como a instância do componente. Não importa onde a propriedade vem na cadeia de herança. Mesmo se com.example.MyComponent estende mx.containers.Canvas, a propriedade estados usará o namespace XML no qual MyComponent está definido.

Em suma, não pensa em estados propriedade como mx: estados , pois o mx: prefixo de uma propriedade é meramente herdado a partir do componente. No entanto, temos de usar mx:. quando definimos o próprio estado real porque é uma classe (não uma propriedade) e essa classe é definida no mx namespace

Para ir um passo além na explicação, você pode alterar o http: // www. adobe.com/2006/mxml namespace para ser algo diferente de mx .

<zzz:VBox xmlns:zzz="http://www.adobe.com/2006/mxml">
    <zzz:states>
    </zzz:states>
</zzz:VBox>

Nesse exemplo, podemos mudar mx e zzz . Agora, a estados propriedade tem de ser prefixado com zzz: em vez de mx:.

Outras dicas

<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
         width="100%" 
         height="100%"
         backgroundColor="#f7f7f7" 
         xmlns:common="com.americanexpress.voice.view.component.common.*">
    <mx:states name="edit">

Por que isso falhar? Descobri também que esta falha quando eu tenho vários espaços de nomes definidos. Remover os endereços <mx: a questão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top