Técnico

Metadata DefaultProperty

Uma das grandes vantagens de utilizar o MXML é ter a facilidade de compor os componentes através da utilização de tags e atributos. Basicamente todo arquivo MXML segue a estrutura:



Entender essa estrutura é simples, estamos setando novos valores para as propriedades do nosso componente base. Em exemplo prático temos:






Saber que uma instância da classe VerticalLayout está sendo atribuída a propriedade layout da classe Application é fácil, mas onde estamos atribuindo a instância da classe Group uma vez que ela não segue a estrutura base do MXML?

Para facilitar a utilização dos componentes no MXML, a Adobe criou a metadata DefaultProperty que, assim como o nome diz, determina uma propriedade a ser utilizada como padrão no MXML caso não haja sua especificação na composição do componentes, isso explica como conseguimos atribuir uma instância da classe Group em uma determinada propriedade da classe Application sem a necessidade de declará-la.

Vamos então criar um exemplo funcional de um componente com a metadata DefaultProperty?

Utilizando a metadada.


package
{
import spark.components.DropDownList;

[DefaultProperty("prompt")]
public class NewDropDownList extends DropDownList
{
public function NewDropDownList()
{
super();
}
}
}

Em sintaxe: [DefaultProperty(“propriedade”)]
No exemplo estou extendendo a classe DropDownList e apenas determinando que sua propriedade default é a propriedade prompt.

Utilizando a Classe DropDownList.




Selecione um item



Na classe DropDownList precisamos abrir a tag da propriedade prompt antes de atribuir o seu valor.

Utilizando a Classe NewDropDownList.



Selecione um item


Na nossa classe recém criada não precisamos abrir a tag da propriedade, pois avisamos o compilador que nossa propriedade padrão é o prompt, logo, qualquer valor atribuído diretamente a tag do componente base será direcionado a propriedade padrão.

Não posso deixar de comentar que a metadata DefaultProperty adicionada na classe NewDropDownList sobrescreveu a DefaultProperty dataProvider que ele herda da classe SkinnableDataContainer, logo muito cuidado na hora de utilizar essa metadata em componentes extendidos!

2 Comments

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Compartilhe isso: