DDD – Dica do Dia #AS3 / #Flex


Bom, muitos dos que trabalham com flex e com datagrid/combobox já tiveram este problema.

Por vezes existe a necessidade de selecionar determinado item num checkbox que tenha um campo que queremos, passo a explicar, tomem por exemplo o seguinte dataprovider de um combobox:

private var dadosCombo:ArrayCollection = new ArrayCollection([{label: "campo 1", dados:"C1", valor: "1"},{label: "campo 2", dados:"H2", valor: "5.3"},{label: "campo 3", dados:"A1", valor: "2.5"}]);

e o nosso combobox:

Agora imaginem que recebem do vosso backend o campo valorCheck = 5.3 e querem selecionar esse valor no combobox… Como a maioria faria:

for(var k:int=0; k
if(String(dadosCombo.getItemAt(k).valor)==String("5.3")) meuCombo.selectedIndex=k;
}

E está correto, mas se tivermos isto para 10 comboBox’s que tenham campos diferentes, imaginem no combobox a seguir o campo que eu recebo não é o valor mas sim o label? ou o dados, ou outro qualquer? teriamos que fazer o código para todos? Sim, algumas pessoas o fazem, mas eis a DDD para o exemplo anterior:

meuCombo.selectedIndex=encontraIndex(dadosCombo,"valor","5.3");

e a função para reaproveitar:

private function encontraIndex(dp:ArrayCollection, campo:String, valor:*):int {
for(var k:int=0; k
if(String(dp.getItemAt(k)[campo])==String(valor)) return k;
}
return -1;
}

E pronto, código re-aproveitado e versatil para todos os possiveis campos num dp e todos os valores, no exemplo em cima eu uso a transformação String() para comparar os campos, o que nao funcionaria no caso de comparar objetos/arrays, para isso retiram o string, ou substituem por Object/Array ou a estrutura de dados que quiserem…

A variavel campo indica o campo do arrayCollection que será comparado, e o valor será o valor que será comparado com o valor da variavel campo.

O campo valor:* permite a utilização de todas as estruturas de dados do as3 que pouca gente usa (e os mais radicais evitam) mas que é muito util…

Por fim, pode parecer demasiado simples, e até é… mas salvou-me de umas dezenas de linhas e tornou-se uma entrada no meu canivete suiço.

Bom, esta é a Dica Do Dia!

Deixe um comentário ou um Trackback
   

Um Comentário

  1. Eduardo
    February 23, 2010 às 5:47 pm | Permalink

    Cara… o FLEX ta acusando erro de SYNTAX. Pode ver isso pra mim?

Deixe um comentário

O seu email nunca será publicado ou partilhado. Campos obrigatórios estão marcados com um *

*
*

Spam Protection by WP-SpamFree