Técnico

Metadatas Personalizadas (Flex 3 e Flex 4)

Metadatas são declarações usadas em suas classes ActionScript/MXML que podem definir atributos de seus componentes, propriedades “bindable”, eventos, etc. Quem programa em flex já deve conhecer algumas das mais comuns como [Bindable] e [Event], e para quem tem um conhecimento em Java, pode comparar metadatas com annotations.

As tags de metadata são associadas a declarações de classe, um único campo de data ou um método. Para associar uma metadata basta você escrevê-la em uma linha antes de sua propriedade ou método, como por exemplo:


[Bindable]
public var nome:String;

Porém, isso não passa de uma implementação básica. Até o momento só utilizamos metadatas pré-definidas na sdk do Flex, e o que gostariamos mesmo seria criar nossas próprias metadatas, e saber como interpretá-las.

Vamos por passos. O exemplo a seguir mostra a implementação de uma metadata personalizada para atributos de uma classe.

Primeiro passo. Vamos criar nossa classe e definir uma Metadata personalizada em um atributo.


public class MinhaClasse
{
[MinhaTag]
public var nome:String;

public function MinhaClasse()
{
}
}

OBS: O flex 4 já reconhece e compila qualquer metadata automaticamente em qualquer classe. O flex 3 precisa de um parâmetro para reconhecer e compilar as metadatas, no caso da minha classe de exemplo, o parâmetro seria: -keep-as3-metadata+=MinhaTag

Segundo Passo. Precisamos de algum método que nos retorne o nome da propriedade que contenha a minha nova metadata.


public static function getPropertiesByMetadata(metadataName:String, object:Object):Array
{
var values:Array = new Array();
var describe:XML = describeType(object);

for each(var variable:XML in describe.variable)
{
for each(var metadata:XML in variable.*)
{
if(metadata.@name == metadataName)
{
values.push(variable.@name);
}
}
}
return values;
}

Este método, nos retorna uma lista de propriedades do parâmetro object cujo metadata seja identica ao parâmetro metadataName.

Terceiro Passo. Utilizar o método com nossa classe de teste.

[actionScript]
private function teste():void
{

var minhaClasse:MinhaClasse = new MinhaClasse();
minhaClasse.nome = “Bruno Sales”;

var array:Array = Metadata.getPropertiesByMetadata(“MinhaTag”, minhaClasse);
for each(var obj:Object in array)
{
trace(“propriedade: ” + obj + ” – valor: ” + minhaClasse[obj]);
}
}

O resultado do trace deste método seria: “propriedade: nome – valor: Bruno Sales”.

Pronto. Com essa base, você será capaz de implementar metadatas personalizadas de atributos em sua aplicação. Para métodos e classes, fica para uma próxima vez. 🙂

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: