DDD – Dica do Dia #AS3 / #Flex

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:
[coolcode lang=”actionscript” linenum=”off”] 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”}]);
[/coolcode]

e o nosso combobox:
[coolcode lang=”actionscript” linenum=”off”] [/coolcode] Agora imaginem que recebem do vosso backend o campo valorCheck = 5.3 e querem selecionar esse valor no combobox… Como a maioria faria:
[coolcode lang=”actionscript” linenum=”off”] for(var k:int=0; k
if(String(dadosCombo.getItemAt(k).valor)==String(“5.3″)) meuCombo.selectedIndex=k;
}
[/coolcode]

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:
[coolcode lang=”actionscript” linenum=”off”] meuCombo.selectedIndex=encontraIndex(dadosCombo,”valor”,”5.3″);
[/coolcode] e a função para reaproveitar:
[coolcode lang=”actionscript” linenum=”off”] 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;
}
[/coolcode] 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!


1 Comment

add yours
  • Eduardo February 23, 2010

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

Leave a Comment

Post