TreeCheck com E4X
O E4X torna mais simples o trabalho com XML e em muitos casos isto significa menos loops e "ifs" no seu código. Como o componente TreeCheck trabalha com XML resolvemos refatorá-lo a fim de obter uma implementação mais interessante.
O resultado você pode conferir no novo TreeCheck. Para efeito de comparação incluímos no pacote "br.com.dclick.renderers" as duas implementações:
CheckIntederminateTreeItemRenderer: Implementação nova que tira proveito do E4X.
CheckIntederminateTreeItemRendererOld: Implementação antiga que foi refatorada.
Para que você compreenda mais facilmente o código é preciso dizer que para uma variável do tipo XML a notação de ponto tem um sentido peculiar. Assim, "myXML.item" corresponde a uma instrução que retornará todos os filhos de "myXML". De maneira semelhante é possível acessar todos os ancestrais, bastando para isto usar a seguinte sintaxe: "myXML..item". Enfim, não confunda o "." em um objeto XML com o "." nos outros objetos .
No código (botão direito -> View Source), destaque para os métodos "allDescendantsSelected" e "allDescendantsUnselected".
No XML, um atributo "selected" define se o item estará ou não selecionado.
1 2 3 4 5 6 7 8 9 10 11 12 | <node label="Clients" selected="false"> <node label="Client01" selected="false"> <node label="Project01" selected="false"/> <node label="Project02" selected="false"/> </node> <node label="Client02" selected="false"> <node label="Project01" selected="false"/> <node label="Project02" selected="false"/> <node label="Project03" selected="false"/> <node label="Project04" selected="false"/> </node> </node> |
Então o método "allDescendantsSelected" retorna true se todos os filhos do XML estiverem selecionados.
1 2 3 4 5 | private function allDescendantsSelected(item:XML):Boolean { var numSelected:int = item..node.(@selected == "true").length(); return numSelected == item..node.length(); } |
A semântica da implementação é a seguinte: se o número de itens do XML cujo atributo "selected" é igual a "true" (primeira linha) for igual ao número de itens do XML (segunda linha), então, o retorno da chamada da função será "true", caso contrário será "false".
O funcionamento do método "allDescendantsUnselected" é semelhante e você pode conferir no código fonte.

2 comentários
people are stranger
Fera…
Estou utilizando o componente Tree CheckBox desenvolvido por vcs da DClick e estou com um problema…
Em alguns componentes como DataGrid, ComboBox e outros, eu alimento os Provider com um ArrayCollection ou Array ou XML…
Nesse caso, vcs usaram XML para alimentar o provider do componente…
Como estou retornando do java um objeto, tentei implementar, mas não tive sucesso ao marcar o checkBox…
Qndo clico no checkBox, a opção é marcada… porem ao tirar o mouse de cima do checkBox, a marcação some…
Abri o arquivo CheckIndeterminateTreeItemRenderer.as para analisar e percebi que em alguns métodos, é implementado variaveis do tipo XML…
aonde percorre os nós fazendo o controle de checagem…
Alguma sugestão??
Atenciosamente!!!
Deixe Seu Comentário