atributos obrigatórios em MXML?
-
06-07-2019 - |
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?
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.