Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

clluiz

[Resolvido]Problema com combobox e radio

Recommended Posts

Estou enfretando o seguinte problema:

 

Eu tenhum um radiobuttongroup e um comboxbox. Eu preciso que quando eu seleciono um radio diferente o data provider do combobox seja atualizado de acordo com esta opção. Até ai tudo bem.

 

O problema é que quando eu faço a atualização os valores que são listados no grid nao mudam, apesar do data provider dele ter mudado. Os valores novos só aparecem depois que eu clico em algum item do combo.

 

Não sei se o problema ficou muito claro.

 

Alguém já passou por esse problema?

 

Obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código é meio complicado, mas o principal ta aqui:

 

			protected function criteriaOption_changeHandler(event:Event):void
			{
				tiCriterio.selectedIndex = -1;
				markBoxAsValid(boxCriteriaOptions);
				resetApplicationMessage();
				tiDataFinal.text = "";
				tiDataInicial.text = "";
				search.text = "";
				applicationModel.style = "default";
				var parameters:Object;
				tiCriterio.invalidateDisplayList();
				tiCriterio.invalidateProperties();
 				switch(criteriaOption.selectedValue) 
				{
					case "MUNICIPIO":
						
						search.enabled = false;
						tiCriterio.enabled = true;
						
						parameters = new Object();
						parameters.modulo = "Interface.UMunicipio";
						parameters.acao = "GetLista";
						parameters.tipo = "MUNICIPIO";
						parameters.time = flash.utils.getTimer().toString();
						
						dispatchEvent(new CriterioEvent(CriterioEvent.LIST,parameters));
						
						break;
					
					case "REGIONAL":
						
						search.enabled = false;
						tiCriterio.enabled = true;
						
						parameters = new Object();
						parameters.modulo = "Interface.URegionalIef";
						parameters.acao = "GetLista";
						parameters.tipo = "REGIONAL";
						parameters.time = flash.utils.getTimer().toString();
						
						dispatchEvent(new CriterioEvent(CriterioEvent.LIST,parameters));
						
						break;
					
					case "NUCLEO":
						
						search.enabled = false;
						tiCriterio.enabled = true;
						
						parameters = new Object();
						parameters.modulo = "Interface.UNucleoIef";
						parameters.acao = "GetLista";
						parameters.tipo = "NUCLEO";
						parameters.time = flash.utils.getTimer().toString();
						
						dispatchEvent(new CriterioEvent(CriterioEvent.LIST,parameters));
						break;
					
					case "SUPRAM":
						
						search.enabled = false;
						tiCriterio.enabled = true;
						
						parameters = new Object();
						parameters.modulo = "Interface.URegionalSupram";
						parameters.acao = "GetLista";
						parameters.tipo = "SUPRAM";
						parameters.time = flash.utils.getTimer().toString();
						
						dispatchEvent(new CriterioEvent(CriterioEvent.LIST,parameters));
						break;
					
					case "TODOS":
						
						search.enabled = true;
						tiCriterio.selectedIndex = -1;
						tiCriterio.enabled = false;
						break;
				}
 			}


			<mx:FormItem styleName="FormItem" width="100%" label="Escolha o critério da busca">
				<mx:HBox id="boxCriteriaOptions" valid="hbox1_validHandler(boxCriteriaOptions)" invalid="hbox1_invalidHandler(boxCriteriaOptions)">
				<mx:RadioButtonGroup id="criteriaOption" change="" itemClick="criteriaOption_itemClickHandler(event)"/>
					<mx:RadioButton id="rb_Municipio" groupName="criteriaOption" enabled="true" label="Município" value="MUNICIPIO" />					
					<mx:RadioButton id="rb_Regional" groupName="criteriaOption" enabled="true" label="Regional" value="REGIONAL" />
					<mx:RadioButton id="rb_Nucleo" groupName="criteriaOption" enabled="true"  label="Nucleo" value="NUCLEO" />
					<mx:RadioButton id="rb_Supram" groupName="criteriaOption" enabled="true" label="Supram" value="SUPRAM"/>
					<mx:RadioButton id="rb_All" groupName="criteriaOption" enabled="true" label="Todos" value="TODOS"/>
			</mx:HBox>
			</mx:FormItem>
			
			<mx:FormItem styleName="FormItem" width="100%" label="Critério">
				<utils:ExtendedComboBox id="tiCriterio" dataProvider="{criterioModel.arrayComboCriterio}" enabled="true" width="65%" prompt="Selecione um item..." labelField="NOME" property="ID"/>
			</mx:FormItem>

Sempre q eu escolho um radio eu tenho que recarregar esse combo de criterios de acordo com o valor escolhido. O combo é carregado corretamente. Mas enquanto eu nao escolho um item, a listagem não aparece completa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não vi onde você esta alterando o valor de "arrayComboCriterio"

 

mas ele é um ArrayCollection ?

 

 

 

[]´s

 

Sim é um array collection.

 

package br.ufla.lemaf.sismaf.controllers
{
	import br.events.CriterioEvent;
	import br.models.ApplicationModel;
	import br.CriterioModel;
	
	import json.JParser;
	
	import mx.collections.ArrayCollection;
	import mx.rpc.AsyncToken;
	import mx.rpc.events.ResultEvent;
	import mx.rpc.http.HTTPService;
	
	import org.swizframework.Swiz;
	import org.swizframework.controller.AbstractController;
	
	public class CriterioController extends AbstractController
	{
		
		[Autowire(bean = "defaultService")]
		public var defaultService:HTTPService;
		
		[Autowire(bean = "utilsService")]
		public var utilsService:HTTPService;
		
		[Autowire(bean = "applicationModel", twoWay = "true")]
		public var applicationModel:ApplicationModel;
		
		[Autowire(bean = "CriterioModel", twoWay = "true")]
		public var criterioModel:CriterioModel;
		
		public function CriterioController()
		{
			super();
		}
		
		/* Dispara uma requisição para retornar uma lista de objetos dessa classe */
		[Mediate(event = "CriterioEvent.LIST", properties = "data")]
		public function listCriterio (data:Object):void {
			
			var call:AsyncToken = utilsService.send(data);
			
			executeServiceCall(call, function (event:ResultEvent):void {
				
				var rawData:String = event.result as String;
				var jObj:Object = JParser.decode(rawData);
				
				criterioModel.arrayComboCriterio = new ArrayCollection(jObj as Array);
				
			});
		}
	}
}

É aqui q eu faco a mudança do array collection.

Compartilhar este post


Link para o post
Compartilhar em outros sites

duas coisas

 

 

1)

veja se essa variável "arrayComboCriterio" esta com [bindable]

 

2)

teste tb colocar essa linha nessa classe que você postou acima:

 

var rawData:String = event.result as String;
var jObj:Object = JParser.decode(rawData);
                                
criterioModel.arrayComboCriterio = new ArrayCollection(jObj as Array);
criterioModel.arrayComboCriterio.update()

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

O arrayComboCriterio ta como Bindable.Eu tentei colocar o update como você disse, mas fala q nao existe esse método, mas eu tentei um que se chama refresh, mas tb não deu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o refresh so funciona se for arraycollection.

 

criterioModel.arrayComboCriterio = new ArrayCollection(jObj as Array);

 

 

criterioModel.arrayComboCriterio = new ArrayCollection(jObj);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver pessoal.

 

Eu fiz o seguinte:

 

Na declaração do Combo:

 

<mx:FormItem styleName="FormItem" width="100%" label="Critério">
    <utils:ExtendedComboBox id="tiCriterio"  updateComplete="tiCriterio_updateCompleteHandler(event)" dataProvider="{criterioModel.arrayComboCriterio}"      enabled="true"     width="65%" prompt="Selecione um item..." labelField="NOME" property="ID"  itemRenderer="mx.controls.Label"/>
</mx:FormItem>

Eu usei o updateComplete e usei a seguinte função para tratá-lo:

 

			protected function tiCriterio_updateCompleteHandler(event:FlexEvent):void
			{
				tiCriterio.invalidateDisplayList();
			}

Obrigado a todos pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.