Salve pessoal,
Neste artigo irei mostrar a vocês uma funcionalidade muito util e bem conhecida por alguns e um tanto desconhecida para outros é o “filterFunction”.
O FilterFunction permite criar e aplicar filtros de visões em ArrayCollection e XMLListCollection fazendo como base alguns criterios de busca. Este é muito útil quando você quer filtar e exibir ao mesmo tempo os dados contidos em algum armazenado ou componente como DataGrid, List, etc. Esta função é muito semelhante á um Auto Complete.
Para demonstrar esta fucionalidade irei demonstra-la em um exemplo real de projetos.
Iremos então criar um componente de busca de contatos de agenda o fluxo para este é muito simples.
Vejamos o seguinte senário:
A pizzaria Moda da Casa quer melhorar o atendimento dos pedidos de encomendas de pizza, para isto ela deseja enquanto o atendente fala com o cliente ele possa fazer uma busca no sistema pelo nome do cliente para pegar os dados pessoais do mesmo.
Para atender esta necessidade iremos criar um simples componente de filtro. o componente será estruturado da seguinte maneira, terá um campo textinput para informar o nome do cliente e um data grid que terá todos os clientes da pizzaria, desta maneria assim que o usuario digitar uma letra o sistema irá fazer um filtro no datagrid exibindo apenas os clientes que tenham as letras digitadas no campo nome.
Então mãos-a-obra.
Requisitos para o desenvolvimento do artigo.
* Ter Flex/Flash Builder ou outra IDE.
* Ter SDk 3 ou superior.
* Conhecimento em ActionScript e Mxml.
Nivel de dificuldade: 5
Passo 1: Criar um projeto Flex BuscadorCliente
Passo 2: Criar uma classe BuscadorCliente.mxml o qual será nosso componente principal.
---------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
creationComplete="onCreate()">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
private var _dadosCliente:ArrayCollection;
/**
* Responsavel por instanciar o ArrayCollection e popular com clientes.
*/
private function onCreate():void {
_dadosCliente = new ArrayCollection();
_dadosCliente.addItem({nome: "Ana Maria", end: "Rua das uvas", fone: 5553323});
_dadosCliente.addItem({nome: "Ana Julia", end: "Rua melao", fone: 5551122});
_dadosCliente.addItem({nome: "Ana Paula", end: "Av das torres", fone: 5553654});
_dadosCliente.addItem({nome: "Maria Antonia", end: "Rua da roça", fone: 5557894});
_dadosCliente.addItem({nome: "Antonio da Silva", end: "Al. Joazeiro", fone: 5559658});
_dadosCliente.addItem({nome: "João Ferreira", end: "Rua do expedito", fone: 5551147});
_dadosCliente.addItem({nome: "Maria Gabriela", end: "Rua da bondade", fone: 5552258});
_dadosCliente.addItem({nome: "Ana Paula Beltrão", end: "Rua da experança", fone: 5553369});
_dadosCliente.addItem({nome: "João Paulo", end: "Av Flex", fone: 5554471});
_dadosCliente.addItem({nome: "Cecilia Duarte", end: "Av Java", fone: 5555528});
_dadosCliente.addItem({nome: "Carolina Alcantra", end: "Av Flash", fone: 5556639});
_dadosCliente.addItem({nome: "José da Silva", end: "Rua da solidão", fone: 5557741});
_dadosCliente.addItem({nome: "Juliana Correia", end: "Rua do chico", fone: 5558852});
_dadosCliente.addItem({nome: "Juliano Correia", end: "Rua da manha", fone: 5559963});
_dadosCliente.addItem({nome: "Aline Bressanim", end: "Rua da sacola", fone: 5551123});
_dadosCliente.addItem({nome: "Gisaleine Bressanim", end: "Rua do sem nome", fone: 5552231});
_dadosCliente.addItem({nome: "Rafael Korn", end: "Rua da tranquilidade", fone: 5553321});
_dadosCliente.addItem({nome: "Ozzy Osbourne", end: "Rua das laranjas", fone: 5554456});
_dadosCliente.addItem({nome: "Bob Marley", end: "Rua das palmeiras", fone: 5555564});
_dadosCliente.addItem({nome: "Vera Verão", end: "Rua Adobe", fone: 5556654});
_dadosCliente.addItem({nome: "Ricardo Rodrigues", end: "Rua Sun", fone: 5557789});
_dadosCliente.addItem({nome: "Luciano Augusto", end: "Av da solidao", fone: 5558897});
_dadosCliente.addItem({nome: "Josiane Milanes", end: "Av Paulo Mender", fone: 5559987});
_dadosCliente.addItem({nome: "Josi Padro", end: "Rua do Brasil", fone: 5559951});
_dadosCliente.addItem({nome: "Carmela Moraes", end: "Rua esqueci", fone: 5557753});
_dadosCliente.addItem({nome: "Patricia Aloha", end: "Rua Maranhão", fone: 5551159});
_dadosCliente.addItem({nome: "Patrik da Silveira", end: "Rua Chuva de Prego", fone: 5553357});
_dadosCliente.addItem({nome: "Marcelo Medeiros", end: "Rua das uvas", fone: 5559382});
_dadosCliente.addItem({nome: "Marcela Santos", end: "Rua das uvas", fone: 5551782});
_dadosCliente.filterFunction = encontreCliente;
_dadosCliente.refresh();
}
/**
* O objeto Item é cada item que esta no data provider do DataGrid.
* A cada vez que o usuario digita uma letra no campo nome esta função é executada
* e retorna true caso ache um item ou false no caso de o Item não corresponder ao filtro.
*/
private function encontreCliente(item:Object):Boolean {
var encontrado:Boolean = false;
/* Crieterio do Filtro */
if (item.nome.toLowerCase().search(tiNomeCliente.text.toLowerCase()) != -1)
return true;
else
return false;
}
]]>
</mx:Script>
<mx:Form width="100%" paddingLeft="0" paddingRight="0">
<mx:FormItem width="100%" label="Nome Cliente">
<mx:TextInput id="tiNomeCliente" width="50%" change="{_dadosCliente.refresh()}"/>
</mx:FormItem>
</mx:Form>
<mx:DataGrid width="100%" height="100%" dataProvider="{_dadosCliente}">
<mx:columns>
<mx:DataGridColumn headerText="Nome" dataField="nome"/>
<mx:DataGridColumn headerText="Endereço" dataField="end"/>
<mx:DataGridColumn headerText="Telefone" dataField="fone"/>
</mx:columns>
</mx:DataGrid>
</mx:Application>
---------------------------------------------------------------------------
Na classe acima temos de pestar a atenção nas seguintes partes:
1. _dadosCliente.filterFunction = encontreCliente; Aqui é onde defino qual metodo de filter o ArrayCollection deve utilizar.
2. _dadosCliente.refresh(); Toda vez que chamo o metodo refresh este por sua vez irá chamar o nosso metodo de filtro.
3. change=”{_dadosCliente.refresh()}” Toda vez que o usuario realizar alguma alteração nos dados do textinpu este irá chamar o metodo refresh que por sua vez irá executar a função de filtro.
4. private function encontreCliente(item:Object):Boolean; Este é o metodo de filtro. O objeto Item é cada item que esta no ArrayCollection
A cada vez que o usuario digita uma letra no campo nome esta função é executada e retorna true caso ache um item ou false no caso de o Item não corresponder ao filtro.
5. [Bindable] private var _dadosCliente:ArrayCollection; É de suma importancia definir a metadata Bindable no Array pois desta maneira todas alterções feita neste o datagrid irá ouvir.
E é isso pessoal uma forma simples, facil e rapida de aplicar filtro em listas. Qualquer duvida com relação deixem seu comentário.
Este mês nós (Sandbox) fizemos o lançamento de uma aplicação rica para internet para o setor de eventos. Batizamos a ferramenta com o nome de Tangu (www.tangu.com.br). Através dela é possível organizar e gerenciar tudo o que se refere ao pré-evento (inscrições online, pagamento, comunicação com participantes/palestrantes e gerenciamento do website do evento). Este último é gerado automaticamente após a criação do evento.
O Tangu esta na versão beta e estamos constantemente incluindo novos features. Nosso objetivo é transformar o Tangu em um software completo para gerenciamento de eventos que vai do pré-evento ao pós-evento.
Fiquem a vontade para conhecer o Tangu e todos os feedbacks da comunidade FloripaFlex são bem vindos.
Para quem ficou curioso, fizemos um post no nosso blog RIA Sandbox.
Olá pessoal, sou integrante da lista a algum tempo mas esta é a minha primeira contribuição para o grupo FloripaFlex. Gostaria de parabenizar a todos os colaboradores e principalmente aos fundadores deste espaço.
Recentemente fizemos uma compilação com as 10 Melhores aplicações em Flex (na opinião da equipe da Sandbox). Este compilação é fruto de um trabalho realizado para a empresa Chaordic, a qual desenvolvemos uma aplicação em Flex para votação e recomendação de filmes. Em breve disponibilizaremos no nosso portfolio esta aplicação para que todos possam acompanhar o resultado.
Fica aqui o convide a todos para conhecerem um pouco mais do que é possível fazer com Flex/AS3 e um excelente trabalho de interface. ;)
Uma necessidade frequentemente expressada é do grupo ter um repositório de códigos de exemplo em Flex, para fins de aprendizagem.
Atendendo a esse pedido, criamos um projeto open source no google code, chamado (claro !) floripaflex
Ver: http://floripaflex.googlecode.com
O Rafael Nami e o muito dinâmico Eduardo Kraus já postaram uns exemplos.
Espero que esse repositório se torne uma ferramenta bem útil.
Infelizmente, tive que cancelar a reunião do dia 29 - até nova ordem, porque não recebi a tempo o material para a divulgação.
A próxima reunião, por sua vez, já está confirmada dia 20/05. Reunião consgrada a Felx com PHP.
Graças ao excelente Eduardo Kraus, temos disponível a gravação da palestra "Architecting performant Flex/Java applications"
O link se encontra aqui: http://blog.mxml.com.br/gravacao-do-floripaflex-31032009
Pessoalmente, eu espero com impaciência sua palestra sobre Flex e PHP
Poís bem, a segunda reunião do grupo foi feita na sexta passada.
O Rafael apresentou um assunto bastante amplo: frameworks de integração Java e Flex e frameworks MVC (o termo MVC sendo um pouco abusivo no caso já que todos os frameworks não são uma implementação MVC strito senso). Os slides da palestra estão aqui.
Além do conteudo, houve sorteio de duas vagas para cursos ofertas pelo Igor Costa, da RIACycle.
Como de costume, pedimos para o público avaliar a palestra e dar sugestões. A avaliação do tema foi excelente, e das sugestões se destaca claramente um desejo do grupo de ter mais prática. Sendo que a maioria está aprendendo, é um pedido lógico.
Seguem dois extratos das sugestões:
"Acredito que tenha faltado pelo menos uns 50 min de demonstração da integração do flex com java."
"Talvez fosse interessante definir um tema para ser debatido em em sequência. (Aplicações de sucesso, Exemplos de utilização e etc..)
Exemplo: Aplicções de segurança em Flex com as linguagens de server side.
Métodos de produtividade com flex e assim por diante.
Onde cada fosse abordado com mais didática para o grupo.Outra idéia seria de criar um banco de códigos dentro fórum, para que os próproios participantes pudesem modificar/melhorar."
Logo, estamos planejando/começando a implementação de três idéias:
5.0