Eu fiz algo parecido, mas, como no componente List eu tenho um objeto (VO),
eu setei no VO uma propriedade booleana.
Como tudo se trata de um VO genérico, eu fiz o item renderer como se fosse
um componente data aware...:P
MeuVO contém a propriedade
var isSelected : Boolean = false;
No ItemRenderer em si, fiz os seguintes métodos, dentro de fx:Script...
// grava ou remove do db de acordo com a propriedade
isSelected
private function onChange( evt : Event ) : void
{
var vo : MeuVO = data as MeuVO;
if ( !vo.isSelected )
{
// grava no db
setVOValueInDB.token = service.createOrUpdateVO(
obj );
}
else
{
// deleta do db
removeVOValueInDB.token = service.deleteVO( obj );
}
}
// callback de retorno quando marcando um item
// ou seja, marcando um item como selecionado
protected function setVOValueInDBResultHandler( event :
ResultEvent ) : void
{
var ret : Boolean = setVOValueInDB.lastResult as
Boolean;
if ( ret )
{
data.isSelected = true;
}
else
{
data.isSelected = false;
}
}
// retorno do callback quando removendo um registro
// ou seja, desmarcando um item
protected function removeVOValueInDBResultHandler( event :
ResultEvent ) : void
{
var ret : Boolean = removeVOValueInDB.lastResult as
Boolean;
if ( ret )
{
data.isSelected = false;
}
else
{
data.isSelected = true;
}
}
Já no MXML do mesmo item renderer, contém isto:
<fx:Declarations>
<services:GenericVOService id="service"
fault="Alert.show( 'Aqui vai a mensagem de erro do RemoteObject, uma msg
genérica.' )"
showBusyCursor="true" />
<s:CallResponder id="setVOValueInDB"
result="setVOValueInDBResultHandler(event)" />
<s:CallResponder id="removeVOValueInDB"
result="removeVOValueInDBResultHandler(event)" />
</fx:Declarations>
<s:HGroup width="100%" height="100%" horizontalAlign="left"
verticalAlign="middle" paddingLeft="5">
<s:CheckBox selected="{ data.isSelected }" click="onChange(event);"
/>
<s:Label text="{ data.categoria }" />
</s:HGroup>
Abraço,
Ernani
2012/1/11 Julio Cesar <[email protected]>
> Pessoal consegui por parte,* (agora preciso adaptar isso para selecionar
> todos de uma vez)*
>
> consegui na aplicação principal pegar o event do itemrenderer, tipo o
> click do checkbox.
>
> criei uma classe:
>
> package
> {
> import flash.events.Event;
>
> public class MyCheckBoxEvent extends Event
> {
> public var isSelected:Boolean;
> public var itemRenderer:Object;
> public static const SELECTED_CHANGED:String = "selectedChanged";
>
> public function MyCheckBoxEvent(type:String, itemRenderer:Object,
> isSelected:Boolean=false){
> super(type);
> this.itemRenderer = itemRenderer;
> this.isSelected = isSelected;
> }
>
> override public function clone():Event{
> return new MyCheckBoxEvent(type, this.itemRenderer,
> this.isSelected);
> }
> }
> }
>
>
> no click do meu checkbox dentro do itemrenderer coloquei isso:
>
> var evt:MyCheckBoxEvent = new
> MyCheckBoxEvent(MyCheckBoxEvent.SELECTED_CHANGED, this, cb.selected);
> owner.dispatchEvent(evt); //Dispatch event from the List
> component, not from the item renderer
>
> ai no meu list coloquei assim:
>
> list.addEventListener('selectedChanged',clickCheck);
>
> e minha funcao:
>
>
> public function clickCheck(event:Event):void
> {
> var e:MyCheckBoxEvent = event as MyCheckBoxEvent;
> Alert.show("Cliquei: " + e.itemRenderer.labelDisplay.text);
> }
>
>
> fonte: http://nwebb.co.uk/blog/?p=47
>
>
>
> Em 11/01/2012 01:58, Cristian Göhl escreveu:
>
> Boa madrugada hehe,
>
> Eu uso *override no set data** *para os meus IR, indiferente de criados
> via MXML ou AS.
>
> override public function set data(value:Object):void
> {
> super.data = value;
> if(value != null)
> {
> // bla bla bla acessa os dados de data[column.dataField]
> ou não e faz o que precisar com outros comps(cb, label,etc);
> }
> }
>
> Ai, meio que esqueci, acho que cria o change do CB no IR, e manda
> atualizar os dados originais(ex. data[column.dataField]);
>
> Dependendo o que você precisar, também pode disparar eventos do IR e
> escutar no form, então fazer algo.
>
> Abraço.
>
> *From:* Julio Cesar <[email protected]>
> *Sent:* Tuesday, January 10, 2012 4:33 PM
> *To:* [email protected]
> *Subject:* Re: [flexdev] Re: Como acessar um itemrenderer de um list ??
>
> Outra coisa, meu itemrenderer não é só um checkbox, é um checkbox, um
> label, e um textinput, pq qdo clico 2x em cima dele, consigo renomeá-lo.
>
> Em 10/01/2012 14:47, Julio Cesar escreveu:
>
> Assim, estou montando um list dinamicamente:
>
> var lista:List = new List();
> lista.width = 100;
> e vou setando as confs dele (tamanho, cor, etc...)
>
> depois eu digo que cada linha será um checkbox, a forma que eu achei
> dinamicamente foi com ClassFactory, desssa forma:
>
> var customItemRenderer:ClassFactory = new
> ClassFactory(checkRenderer);
> lista.itemRenderer = customItemRenderer;
>
> depois eu preencho o dataprovider dele com meu arraycollection
>
> depois eu adiciono na tela:
> panel_listas.addElement(lista);
>
>
> tudo isso dinamicamente, até ai blz, gera legal, ai eu quero acessar
> alguma linha e dar um selected no checkbox, ou até mesmo selecionaar todos
> os checks ao msm tempo, é ai q eu enrosco.
>
> erictonussi
> eu quero pq eu quero saber quais estão marcados
>
> helio.afsilva
> não sei se da para pegar o array bindado pq toda hora muda ele
>
> leonardoc.oliveira
> gostei do seu link hehe
>
> Em 10/01/2012 13:36, Eric Tonussi escreveu:
>
> Explica melhor o que exatamente você quer fazer. Para que você quer
> acessar este item render?
>
> Em 10 de janeiro de 2012 13:25, Julio Cesar <[email protected]>escreveu:
>
>> Cara difícil isso, coloquei um breakpoint nas linhas abaixo (na vdd não
>> manjo mto debugar) to tentando aprender
>>
>> var customItemRenderer:ClassFactory = new ClassFactory(checkRenderer);
>> lista.itemRenderer = customItemRenderer;
>>
>> lista.dataProvider = ac_colunas;
>>
>> dentro de checkRenderer tem um combobox chamado cb que recebe 'selected'
>>
>> mas não consegui identificar ainda
>>
>>
>> Em 10/01/2012 12:47, Leonardo Oliveira escreveu:
>>
>>> Julio, use o modo debug. Coloque um breakpoint onde vc quiser,
>>>
>>> adicione uma expressão watch ao seu itemRenderer e veja na aba
>>> Expressions. Tudo que vc precisa está lá.
>>>
>>> On 10 jan, 11:05, Julio Cesar<[email protected]> wrote:
>>>
>>>> Boa tarde pessoal
>>>>
>>>> Tenho um list com itemrenderer de um combobox
>>>>
>>>> Gostaria de saber se tem como acessar este item renderer
>>>>
>>>> valeu
>>>>
>>>
>> --
>> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>> Para enviar uma mensagem, envie um e-mail para [email protected]
>> Para sair da lista, envie um email em branco para
>> [email protected]
>> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>>
>
> --
> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
> Para enviar uma mensagem, envie um e-mail para [email protected]
> Para sair da lista, envie um email em branco para
> [email protected]
> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>
>
>
> --
> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
> Para enviar uma mensagem, envie um e-mail para [email protected]
> Para sair da lista, envie um email em branco para
> [email protected]
> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
> --
> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
> Para enviar uma mensagem, envie um e-mail para [email protected]
> Para sair da lista, envie um email em branco para
> [email protected]
> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>
>
> --
> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
> Para enviar uma mensagem, envie um e-mail para [email protected]
> Para sair da lista, envie um email em branco para
> [email protected]
> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>
--
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para
[email protected]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev