Fala Felipe, beleza?
Tentei o que você disse, e algumas outras coisas. Consegui fazer aparecer
algo pegando o evento click, e chamando o gc.refresh(); (mas só apareceu a
primeira categoria, mas acredito que seja um começo).
Muito provavelmente, o problema está na hora que chamo o gc.refresh, assim
como você e o Marcelo já falaram. Apesar disso, ainda não sei onde chamar.
Estou enviando em anexo, o meu Mediator e o ListaContas.mxml. Caso tenha
paciência para dar uma olhada, ficarei grato,
Atenciosamente
Danilo
2008/6/6 Felipe Fernandes <[EMAIL PROTECTED]>:
>
> Danilo posta também o listaContas.
> antes tenat o seguinte:
> listaContas.categories = categoryProxy.categories;
> listaContas.gc.source = listaContas.categories;
> listaContas.gc.refresh();
>
> Felipe
> http://bobfernandes.wordpress.com
>
>
> 2008/6/5 Danilo <[EMAIL PROTECTED]>:
> > Felipe, na verdade, estou utilizando o PureMVC, e no meu código, está
> assim:
> >
> > public function ListaContasMediator(viewComponent:Object){
> > super(NOME,viewComponent);
> >
> > listaContas.addEventListener(ListaContas.CREATE, onCreate);
> > listaContas.addEventListener(ListaContas.REMOVE, onDelete);
> > listaContas.addEventListener(ListaContas.SELECT, onSelect);
> >
> > categoryProxy = facade.retrieveProxy(CategoryProxy.NOME) as
> > CategoryProxy;
> >
> > listaContas.categories = categoryProxy.categories;
> > listaContas.gc.refresh();
> > }
> >
> > e tem essa (que pega o listaContas):
> > private function get listaContas():ListaContas{
> > return viewComponent as ListaContas
> > }
> >
> > Eu seto o categories, do listaContas, ali na linha em vermelho, e logo
> > abaixo dei o refresh. Porém, não funciona.
> > Não sei nem o que tentar de diferente mais.
> >
> > Abraço,
> > Danilo
> >
> > 2008/6/5 Felipe Fernandes <[EMAIL PROTECTED]>:
> >>
> >> Danilo,
> >>
> >> Deixa eu ver se consigo te ajudar, tem uma função no meio do seu
> >> código que trata o retorno dos dados e deve conter algo parecido com
> >> isso:
> >> categories = new ArrayCollection(event.result as Array);
> >> Agora adicione o seguinte logo abaixo:
> >> gc.refresh()
> >>
> >> Caso vc continue com dúvidas poste seu código (a parte flex) inteiro
> >> aqui, para que possamos te explicar melhor.
> >>
> >> Felipe
> >> http://bobfernandes.wordpress.com
> >>
> >> 2008/6/5 Danilo <[EMAIL PROTECTED]>:
> >> > Marcelo,
> >> >
> >> > Estou entendendo o que devo fazer.
> >> > Agora surgiu uma outra dúvida.
> >> >
> >> > No result do meu método que pega as categorias, eu adicionei o
> seguinte
> >> > código:
> >> >
> >> > var listaContas:ListaContas = new ListaContas();
> >> > listaContas.gc.refresh();
> >> >
> >> > Porém, não está funcionando, mas eu imagino que não esteja
> funcionando,
> >> > porque eu dei um new ListaContas. Correto?
> >> > Você sabe me dizer, como tem que ser o gc.refresh(), lá no meu proxy,
> >> > para
> >> > que ele funcione na tela listaContas?
> >> >
> >> > Abraço,
> >> > Danilo
> >> > 2008/6/5 Marcelo Savioli <[EMAIL PROTECTED]>:
> >> >>
> >> >> Danilo,
> >> >>
> >> >> Você pode colocar o gc.refresh() no result do metódo que carrega
> >> >> "categories".
> >> >> Pode também adicionar um listener no seu dataProvider para saber
> quando
> >> >> foi alterada a collection.
> >> >>
> >> >> Se precisar de ajuda com isso é só mandar.
> >> >>
> >> >> 2008/6/5 Danilo <[EMAIL PROTECTED]>:
> >> >>>
> >> >>> Eu fiz o debug, e entendi o que você quis dizer. Só não consigo
> fazer
> >> >>> funcionar agora. Será que tem como você me dar uma força nessa
> parte,
> >> >>> novamente?
> >> >>>
> >> >>> 2008/6/5 Danilo <[EMAIL PROTECTED]>:
> >> >>>>
> >> >>>> Marcelo,
> >> >>>> Até entendi o que você quis dizer, mas não entendi como fazer isso
> >> >>>> funcionar no código. Talvez seja por ser novato no as3, talvez seja
> >> >>>> incompetência minha mesmo. Será que teria como você explicar
> >> >>>> novamente?
> >> >>>> Desculpa o incômodo.
> >> >>>>
> >> >>>> Abraço,
> >> >>>> Danilo
> >> >>>>
> >> >>>> 2008/6/4 Marcelo Savioli <[EMAIL PROTECTED]>:
> >> >>>>>
> >> >>>>> Danilo,
> >> >>>>>
> >> >>>>> Apesar de estar no init da sua aplicação o retorno é assíncrono,
> >> >>>>> portanto ocorre aquilo que falei..
> >> >>>>> Você pode utilizar o debug para confirmar isso.
> >> >>>>>
> >> >>>>> Esta já seria a forma mais simples de agrupar dados no
> >> >>>>> AdvancedDataGrid. Este componente é muito chato mesmo de se
> >> >>>>> trabalhar, da
> >> >>>>> para perceber claramente que ele não foi desenvolvido pela mesma
> >> >>>>> equipe que
> >> >>>>> desenvolveu o sdk.
> >> >>>>>
> >> >>>>> 2008/6/4 Danilo <[EMAIL PROTECTED]>:
> >> >>>>>>
> >> >>>>>> O meu serviço PHP, é chamado no init da aplicação. Essa é a
> >> >>>>>> primeira
> >> >>>>>> coisa a ser carregada. Na verdade, no GroupingCollection, eu
> >> >>>>>> imagino que o
> >> >>>>>> categories, esteja com seus dados, mesmo porque, se eu pegar esse
> >> >>>>>> mesmo
> >> >>>>>> categories, e colocar diretamente no AdvancedDataGrid, como
> >> >>>>>> dataProvider,
> >> >>>>>> ele monta normalmente.
> >> >>>>>>
> >> >>>>>> Será que não seria algum problema com os dados retornados do php?
> >> >>>>>>
> >> >>>>>> Você conhece uma maneira mais fácil, para montar o
> >> >>>>>> AdvancedDataGrid?
> >> >>>>>>
> >> >>>>>> Abraço,
> >> >>>>>> Danilo
> >> >>>>>>
> >> >>>>>> 2008/6/4 Marcelo Savioli <[EMAIL PROTECTED]>:
> >> >>>>>>>
> >> >>>>>>> Danilo,
> >> >>>>>>>
> >> >>>>>>> Pode não ser o seu caso, mas vamos tentar.
> >> >>>>>>>
> >> >>>>>>> Quando você faz:
> >> >>>>>>>
> >> >>>>>>> <mx:dataProvider>
> >> >>>>>>> <mx:GroupingCollection id="gc" source="{categories}">
> >> >>>>>>> <mx:Grouping>
> >> >>>>>>> <mx:GroupingField name="catA"/>
> >> >>>>>>> <mx:GroupingField name="catB"/>
> >> >>>>>>> <mx:GroupingField name="catC"/>
> >> >>>>>>> <mx:GroupingField name="catD"/>
> >> >>>>>>> </mx:Grouping>
> >> >>>>>>> </mx:GroupingCollection>
> >> >>>>>>> </mx:dataProvider>
> >> >>>>>>>
> >> >>>>>>> Você esta dizendo que o dataProvider é uma GroupingCollection
> >> >>>>>>> baseada
> >> >>>>>>> em "categories". A principio, "categories" é vazio. Então a
> >> >>>>>>> GroupingCollection passa uma coleção vazia para o dataProvider
> do
> >> >>>>>>> grid.
> >> >>>>>>> Quando você chama seu serviço no PHP, "categories" é atualizado,
> >> >>>>>>> porém a GroupingCollection não monta automaticamente um novo
> >> >>>>>>> dataprovider
> >> >>>>>>> baseado nessa mudança.
> >> >>>>>>> Por isso, ao chamar o refresh da GroupingCollection você estará
> >> >>>>>>> fazendo com que a GroupingCollection monte novamente uma coleção
> >> >>>>>>> para servir
> >> >>>>>>> de dataProvider ao grid.
> >> >>>>>>>
> >> >>>>>>> Portanto, sempre que modificar sua coleção é necessário remontar
> o
> >> >>>>>>> dataProvider do grid utilizando o "gc.refresh()".
> >> >>>>>>>
> >> >>>>>>> 2008/6/4 Danilo <[EMAIL PROTECTED]>:
> >> >>>>>>>>
> >> >>>>>>>> Marcelo,
> >> >>>>>>>> Mas, eu acho que os dados já retornaram do php, visto que se eu
> >> >>>>>>>> uso
> >> >>>>>>>> um dataprovider antes de dar um GroupingCollection, os dados
> >> >>>>>>>> montam a grid
> >> >>>>>>>> normalmente. Caso eu esteja equivocado, não entendi o que você
> >> >>>>>>>> quis dizer,
> >> >>>>>>>> ou como fazer o que você disse.
> >> >>>>>>>>
> >> >>>>>>>> Att,
> >> >>>>>>>> Danilo
> >> >>>>>>>>
> >> >>>>>>>> 2008/6/3 Marcelo Savioli <[EMAIL PROTECTED]>:
> >> >>>>>>>>>
> >> >>>>>>>>> Danilo,
> >> >>>>>>>>>
> >> >>>>>>>>> Faz o "gc.refresh()" após os dados retornarem do php.
> >> >>>>>>>>>
> >> >>>>>>>>> 2008/6/3 Danilo <[EMAIL PROTECTED]>:
> >> >>>>>>>>>>
> >> >>>>>>>>>> Olá pessoal,
> >> >>>>>>>>>> Estou com um problema, para mostrar os dados que vêm do
> amfphp
> >> >>>>>>>>>> no
> >> >>>>>>>>>> AdvancedDatagrid, agrupados.
> >> >>>>>>>>>> Atualmente, estou retornando os objetos do amfphp em uma
> array,
> >> >>>>>>>>>> da
> >> >>>>>>>>>> seguinte maneira:
> >> >>>>>>>>>>
> >> >>>>>>>>>> $arrTree[$i]["catA"] = $r->catA;
> >> >>>>>>>>>> $arrTree[$i]["catB"] = $r->catB;
> >> >>>>>>>>>> $arrTree[$i]["catC"] = $r->catC;
> >> >>>>>>>>>> $arrTree[$i]["catD"] = $r->catD;
> >> >>>>>>>>>> $i++;
> >> >>>>>>>>>>
> >> >>>>>>>>>>
> >> >>>>>>>>>> E no final, retorno a array $arrTree.
> >> >>>>>>>>>>
> >> >>>>>>>>>> Acontece, que se eu quiser listar em um Datagrid, funciona
> >> >>>>>>>>>> perfeitamente!
> >> >>>>>>>>>> Porém, gostaria de listar Hierarquicamente em um
> >> >>>>>>>>>> AdvancedDatagrid,
> >> >>>>>>>>>> juntamente com outros valores, mas não estou conseguindo
> montar
> >> >>>>>>>>>> o
> >> >>>>>>>>>> agrupamento dos itens. Tentei da seguinte maneira:
> >> >>>>>>>>>>
> >> >>>>>>>>>> <mx:dataProvider>
> >> >>>>>>>>>> <mx:GroupingCollection id="gc" source="{categories}">
> >> >>>>>>>>>> <mx:Grouping>
> >> >>>>>>>>>> <mx:GroupingField name="catA"/>
> >> >>>>>>>>>> <mx:GroupingField name="catB"/>
> >> >>>>>>>>>> <mx:GroupingField name="catC"/>
> >> >>>>>>>>>> <mx:GroupingField name="catD"/>
> >> >>>>>>>>>> </mx:Grouping>
> >> >>>>>>>>>> </mx:GroupingCollection>
> >> >>>>>>>>>> </mx:dataProvider>
> >> >>>>>>>>>>
> >> >>>>>>>>>> Seguindo alguns exemplos que encontrei na própria
> documentação
> >> >>>>>>>>>> da
> >> >>>>>>>>>> adobe.
> >> >>>>>>>>>> No evento creationComplete, eu tento chamar esse agrupamento
> >> >>>>>>>>>> assim: creationComplete="{gc.refresh();}"
> >> >>>>>>>>>> Mas não está funcionando.
> >> >>>>>>>>>>
> >> >>>>>>>>>> Alguém sabe me dizer, onde pode estar ocorrendo o erro? Eu
> sei
> >> >>>>>>>>>> que
> >> >>>>>>>>>> os dados de categories, estão chegando, tanto que se eu
> >> >>>>>>>>>> utilizar um
> >> >>>>>>>>>> dataProvider="{categories}" no AdvancedDataGrid, ele funciona
> >> >>>>>>>>>> normalmente,
> >> >>>>>>>>>> porém, parece que não estou conseguindo tratar estes dados.
> >> >>>>>>>>>>
> >> >>>>>>>>>> Será que alguém consegue me ajudar?
> >> >>>>>>>>>>
> >> >>>>>>>>>> Abraço,
> >> >>>>>>>>>> Danilo
> >> >>>>>>>>>>
> >> >>>>>>>>>>
> >> >>>>>>>>>
> >> >>>>>>>>>
> >> >>>>>>>>>
> >> >>>>>>>>> --
> >> >>>>>>>>> Marcelo Curi Savioli
> >> >>>>>>>>> D-Click Web & Mobile Solutions
> >> >>>>>>>>> [EMAIL PROTECTED]
> >> >>>>>>>>> www.dclick.com.br/blog
> >> >>>>>>>>> www.dclick.com.br
> >> >>>>>>>>>
> >> >>>>>>>>
> >> >>>>>>>>
> >> >>>>>>>>
> >> >>>>>>>
> >> >>>>>>>
> >> >>>>>>>
> >> >>>>>>> --
> >> >>>>>>> Marcelo Curi Savioli
> >> >>>>>>> D-Click Web & Mobile Solutions
> >> >>>>>>> [EMAIL PROTECTED]
> >> >>>>>>> www.dclick.com.br/blog
> >> >>>>>>> www.dclick.com.br
> >> >>>>>>>
> >> >>>>>>
> >> >>>>>>
> >> >>>>>>
> >> >>>>>
> >> >>>>>
> >> >>>>>
> >> >>>>> --
> >> >>>>> Marcelo Curi Savioli
> >> >>>>> DClick Web & Mobile Solutions
> >> >>>>> [EMAIL PROTECTED]
> >> >>>>> www.dclick.com.br/blog
> >> >>>>> www.dclick.com.br
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>>
> >> >>>
> >> >>
> >> >>
> >> >>
> >> >> --
> >> >> Marcelo Curi Savioli
> >> >> DClick Web & Mobile Solutions
> >> >> [EMAIL PROTECTED]
> >> >> www.dclick.com.br/blog
> >> >> www.dclick.com.br
> >> >>
> >> >
> >> >
> >> > >
> >> >
> >>
> >>
> >>
> >> --
> >> Felipe - http://bobfernandes.wordpress.com
> >>
> >>
> >
> >
> > >
> >
>
>
>
> --
> Felipe - http://bobfernandes.wordpress.com
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---
ListaContas.mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:AdvancedDataGrid xmlns:mx="http://www.adobe.com/2006/mxml" width="100%"
height="100%"
click="mostraAlert(categories);">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import br.com.ardenghi.model.vo.CategoryVO;
import mx.collections.ArrayCollection;
public static const CREATE:String = 'create';
public static const REMOVE:String = 'remove';
public static const SELECT:String = 'select';
[Bindable] public var categories:ArrayCollection;
[Bindable] public var selectedCategory:CategoryVO;
private function selectBook(pCategory:CategoryVO):void{
selectedCategory = pCategory ;
dispatchEvent(new Event(SELECT, true));
}
private var ac:ArrayCollection = new
ArrayCollection([{name:"DataGrid", size:"3 kb",
children:new
ArrayCollection([{name:"DataGridBase", size:"4 kb"}, {name:"DataGridHeader",
size:"2 kb"}])
}]);
private function
mostraAlert(texto:ArrayCollection):void{
Alert.show(texto.length.toString(),"Quantidade
de Categorias");
// gc.refresh();
}
]]>
</mx:Script>
<mx:dataProvider>
<mx:GroupingCollection id="gc" source="{categories}">
<mx:Grouping>
<mx:GroupingField name="catA"/>
<mx:GroupingField name="catB"/>
<mx:GroupingField name="catC"/>
<mx:GroupingField name="catD"/>
</mx:Grouping>
</mx:GroupingCollection>
</mx:dataProvider>
<mx:columns>
<mx:AdvancedDataGridColumn dataField="catA" />
<mx:AdvancedDataGridColumn dataField="catB" />
<mx:AdvancedDataGridColumn dataField="catC" />
<mx:AdvancedDataGridColumn dataField="catD" />
</mx:columns>
</mx:AdvancedDataGrid>package br.com.ardenghi.view{
import br.com.ardenghi.ApplicationFacade;
import br.com.ardenghi.model.CategoryProxy;
import br.com.ardenghi.model.vo.CategoryVO;
import br.com.ardenghi.view.components.ListaContas;
import flash.events.Event;
import mx.controls.Alert;
import org.puremvc.as3.interfaces.IMediator;
import org.puremvc.as3.interfaces.INotification;
import org.puremvc.as3.patterns.mediator.Mediator;
public class ListaContasMediator extends Mediator implements IMediator{
public static const NOME:String = "ListaContasMediator";
private var categoryProxy:CategoryProxy;
public function ListaContasMediator(viewComponent:Object){
super(NOME,viewComponent);
listaContas.addEventListener(ListaContas.CREATE,
onCreate);
listaContas.addEventListener(ListaContas.REMOVE,
onDelete);
listaContas.addEventListener(ListaContas.SELECT,
onSelect);
categoryProxy =
facade.retrieveProxy(CategoryProxy.NOME) as CategoryProxy;
listaContas.categories = categoryProxy.categories;
listaContas.gc.source = listaContas.categories;
listaContas.gc.refresh();
}
private function onCreate(pEvt:Event):void{
var newCategory:CategoryVO = new CategoryVO();
newCategory.categoria = "Categoria";
newCategory.idcategoriasup = 1;
categoryProxy.createCategory(newCategory);
}
private function onSelect(pEvt:Event):void{
sendNotification(ApplicationFacade.CATEGORY_SELECTED,
listaContas.selectedCategory);
}
private function onDelete(pEvt:Event):void{
categoryProxy.deleteCategory(listaContas.selectedCategory);
}
override public function listNotificationInterests():Array{
return [ ApplicationFacade.CATEGORY_SELECTED ];
}
override public function
handleNotification(notification:INotification):void{
switch(notification.getName()){
case ApplicationFacade.CATEGORY_SELECTED:
listaContas.selectedCategory =
notification.getBody() as CategoryVO;
break;
}
}
private function get listaContas():ListaContas{
return viewComponent as ListaContas
}
}
}