Capturar valores de checkbox no flex

9 respostas
L

Olá pessoal,

Estou com problemas para capturar os valores selecionados nos checkbox.

Os checkbox são populados por valores do BD, estou usando um mx:tile e um mx:repeate para desenha-los.

Segue o código:

<mx:FormItem label="Para:" width="100%" height="70"> 
	<mx:Tile id="categoryTile" width="100%" height="100%" borderStyle="solid" direction="horizontal"
		paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5"> 
	        <mx:Repeater id="categoryRpt" dataProvider="{categoryList}" >
             	        <mx:CheckBox id="categoryChx" label="{categoryRpt.currentItem.name}" />
       	        </mx:Repeater>
         </mx:Tile>
</mx:FormItem>

Ao clicar em um botão quero que ele capture todos os checkbox que estão selecionados.

Obrigado!

9 Respostas

surfzera

Dae seguinte eu faço assim… ve se ajuda

<s:Panel width="40%" title="Perfis" cornerRadius="5"  height="50%">
	<s:Scroller width="100%" height="100%">
			<s:DataGroup id="perfis" itemRenderer="br.com.sectioaurea.libs.CheckBoxRenderer" dataProvider="{listaPerfis}">
					<s:layout>
						<s:VerticalLayout paddingLeft="5"/>
					/s:layout>
			</s:DataGroup>
	</s:Scroller>
</s:Panel>

Para pegar os selecionados:

for(var a:uint = 0; a < perfis.dataProvider.length; a++){
		var idUsuarioList:int = perfis.dataProvider[a].id;
		for(var b:uint = 0; b < dg.selectedItem.perfis.length; b++){
			var idUsuarioPerfil:int = dg.selectedItem.perfis[b].id;
			if(idUsuarioList == idUsuarioPerfil){
				var c:CheckBoxRenderer = perfis.getElementAt(a) as CheckBoxRenderer; 
				c.selected = true;
			}
		}
}
L

Mais você está usando o flex 4, esse sistema que estou desenvolvendo ainda está no flex 3…

Tentei aqui e não rolou…

renzonuccitelli

Vc pode fazer o mesmo usando um List no Flex 3.
Mas se quiser continuar a usar o Repeater, experimente colocar:

label="{checkBoxRepeater.currentItem.label}" data="{checkBoxRepeater.currentItem.data}" change="checkBox_change(event);" como parametro de seu checkBox dentro do Repeater, onde checkBoxRepeater é o id do seu repeater.

No listener, escreva algo como:

private function checkBox_change(evt:Event):void { var ch:CheckBox = evt.currentTarget as CheckBox; ch.getRepeaterItem().data=ch.value; }

Precisando de cursos Flex, de uma olhada na Nuccitec.

[]s

L

Olá, estou com uma dúvida, oq exatemente essa linha está fazendo?

preciso que ao clicar no check ele armazene os ids dos objetos do checkbox em um array.

obrigado!

L

Entendi agora, ao colocar o data dentro do checkbox eu consigo pegar esse valor.

Consegui resolver agora. Segue o código:

private function checkBox_change(evt:Event):void {
			var ch:CheckBox = evt.currentTarget as CheckBox;
			var category:Category = ch.data as Category;
			selectedCategoryList.addItem(category);
		}

Obrigado pela ajuda!

renzonuccitelli

Naquela linha o que está sendo feito é setar o item do data provider do repeater com o valor selecionado no chechbox, pois isso não ocorre automáticamente (Se for Flex 4 aí daria pra fazer com binding bidirecional).

[]s

L

Entendi, valeu pela explicação…

E para desmarcar todos os checkbox, tem alguma dica ai?

[]'s

L

Consegui, é só setar novamente o dataprovider do repeat que ele desmarca todos os checkbox.

valeu!

renzonuccitelli

l.cestarolli:
Consegui, é só setar novamente o dataprovider do repeat que ele desmarca todos os checkbox.

valeu!

Sim, isso ocorre por que vc bindou os itens do repeater aos check box nessa linha de código:

[]s

Criado 25 de outubro de 2010
Ultima resposta 26 de out. de 2010
Respostas 9
Participantes 3