Pergunta

É possível, por meio de algum tipo de metadados, presumivelmente, para forçar uma propriedade de um objeto a ser definido? Temos um número de componentes não-visuais que simplesmente não fazer nada a não ser uma ou mais propriedades são definidas, tais como:

<ToolTip target="{this}">
    <mx:Image source="foo.png" />
</ToolTip>

Neste caso, a propriedade de destino seria bom para marca como necessário, uma vez que não faz sentido de nunca tê-lo definido. Este não é um grande problema, já que é fácil de documento, mas seria bom para eliminar pelo menos alguns de depuração-roundtrips por ter o compilador dizer o desenvolvedor de seu erro.

Nós não queremos para esta tag para ser redundante de qualquer forma, o que poderia ter sido resolvido (neste caso), simplesmente fazendo o componente ToolTip um UIComponent e usando a propriedade pai. Mas, para uma coisa, isso adiciona uma sobrecarga desnecessária e em outros casos simplesmente não é correta:

<Button id="btn" label="Foo" />
<ToolTip target="{btn}">
    <mx:Image source="foo.png" />
</ToolTip>

Assim, são atributos mxml obrigatória uma possibilidade?

Foi útil?

Solução

Há uma solução, mas não é tão simples como a utilização de metadados. Basta ter os seus componentes não-visuais implementar a interface IMXMLObject. A interface tem apenas um método, "inicializado". Implementando a interface permite que você inspecione o objeto como seu inicializado via MXML.

Assim ...

public function initialized(document:Object, id:String):void
{
  if ( target == null ) throw new Error( "You must supply an argument to target!" );
} 

Seria bom ter a verificação de tempo de compilação, mas isso funciona decentemente.

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