Acontece que os componentes baseados em lista (ListBased) possuem uma arquitetura interessante onde eles reaproveitam os itemRenderers, reciclando-os.
Explicando de forma bem rapida: - Se vc possue um grid com 1000 linhas, mas somente 10 estão exibidas, o datagrid (ou qualquer outro list-based) irá criar só 12 renderers, e não os 1000. Isso faz com q a performance do componente seja melhorada, afinal pra q criar 988 renderers q nao sao exibidos??? - Agora vc me pergunta: "Mas pq criou 12 se só exibe 10?" Acontece q o componente cria um renderer a mais "para baixo" e outro a mais "para cima" para q o efeito de rolagem não fique prejudicado. - E como os outros 988 registros são mostrados? R: É aí q entra a "reciclagem de componentes". A cada vez q o componente sofre uma rolagem, ele pega o objeto do data provider e seta no ultimo renderer, e a partir do penultimo ele re-seta o item anterior no renderer de cima. (ou de baixo qnd a rolagem é pra cima). É uma "dança das cadeiras", onde o objeto do renderer 10 passa para o 9, o do 9 passa para o 8, o do 8 passa para o 7... e assim respectivamente. É nessa hora q vc entende o porquê de sobrescrever o set data, pois nessa 'dança das cadeiras' é q o set data é invocado para passar o novo item para um renderer já criado, sucessivamente. Tudo isso é feito diretamente pelo componente baseado em lista q usa os renderers (todos q extendem de ListBased - datagrid, list, hosrizontallist, etc...), mas isso no Flex 3.x Já no Flex 4.x SDK isso não é mais responsabilidade do componente list-based, mas do Layout que o componente usa, isso qnd se ativa a opção useVirtualLayout=true, onde a "mecânica" é um pouquinho mais complexa q a já existente, mas muda de lugar. Detalhe q no Flex4, para se ter uma "lista" com dados complexos, precisa usar o DataGroup com o Layout apropriado, e não esquecer de usar DefaultComplexItemRenderer como classe renderer. Espero ter compreendido :) []'s Em 28 de dezembro de 2010 11:18, Pablo Souza <[email protected]> escreveu: > Olá Helio! > > Todas as classes que implementam a interface mx.core.IDataRenderer > suportam essa propriedade. > > No caso do exemplo que te enviei, a classe é a MXItemRenderer e você > verá essa relação da seguinte forma: > MXItemRenderer EXTENDS DataRenderer EXNTEDS DataRenderer IMPLEMENTS > IDataRenderer. > > Caso você precise criar um item renderer ou item editor customizado > basta fazer com que seu componente implemente a interface > IDataRenderer. > > A propriedade data contêm todo o dataprovider da linha e não somente o > valor para aquela coluna que você setou o item renderer. > > > Abs! > > > > ------ > Pablo Souza > http://rectius.com.br > @pablo_souza > > > On Dec 28, 10:54 am, Helio Antonio Francisco Silva > <[email protected]> wrote: > > A unica diferença desse seu exemplo pro meu foi isso aqui > > > > * > > > > override* *public* *function* *set* data > > Colocando essa funcao os valores aparecem, sem ela os valores vem > nulos... > > poderia me explicar o por que disso ? > > > > 2010/12/27 pablo.souza <[email protected]> > > > > > > > > > > > > > Crie seu componente com a classe MXDataGridItemRenderer, que perrmite > > > você use componentes Spark como itemrenderes do mx DataGrid. > > > > > <s:MXDataGridItemRenderer > > > xmlns:fx="http://ns.adobe.com/mxml/2009" > > > xmlns:s="library://ns.adobe.com/flex/spark" > > > xmlns:mx="library://ns.adobe.com/flex/mx" > > > focusEnabled="true"> > > > <fx:Script> > > > <![CDATA[ > > > > > override public function set > data(value:Object):void > > > { > > > super.data = value; > > > } > > > > > ]]> > > > </fx:Script> > > > > > <s:BorderContainer > > > id="statusBorder" > > > horizontalCenter="0" verticalCenter="0" > > > width="8" height="8" cornerRadius="18" > > > dropShadowVisible="false"/> > > > > > </s:MXDataGridItemRenderer> > > > > > Abs! > > > > > On Dec 27, 4:42 pm, Helio Antonio Francisco Silva > > > <[email protected]> wrote: > > > > Pessoal estou com uma baita dor de cabeça com o maldito itemrender no > > > flex4. > > > > To passando certinho como em uns exemplos na net e nao funciona. > > > > > > No flex3 eu fazia assim tambem era muito EASY e no flex 4 to tomando > bola > > > =( > > > > alguem me ajuda por favor. > > > > > > <mx:DataGrid width="744" height="468" paddingRight="2" > id="ContratosDG" > > > > fontFamily="Verdana" fontSize="10" > > > > > > > <mx:columns> > > > > > > <mx:DataGridColumn fontFamily="Verdana" > itemRenderer="components.legend" > > > > fontSize="10" fontWeight="bold" headerText="Status" width="40" > > > dataField=" > > > > CSTATUS"/> > > > > > > <mx:DataGridColumn fontFamily="Verdana" fontSize="10" > fontWeight="bold" > > > > headerText="Filial" width="40" dataField="FILIAL"/> > > > > > > <mx:DataGridColumn fontFamily="Verdana" fontSize="10" > fontWeight="bold" > > > > headerText="Contrato" width="60" dataField="CONTRATO"/> > > > > > > <mx:DataGridColumn fontFamily="Verdana" fontSize="10" > fontWeight="bold" > > > > headerText="Cliente" width="60" dataField="CODIGO"/> > > > > > > <mx:DataGridColumn fontFamily="Verdana" fontSize="10" > fontWeight="bold" > > > > headerText="Nome" width="250" dataField="NOME"/> > > > > > > <mx:DataGridColumn fontFamily="Verdana" fontSize="10" > fontWeight="bold" > > > > headerText="Tipo Contrato" width="80" dataField="TIPOCONTRA"/> > > > > > > </mx:columns> > > > > > > </mx:DataGrid> > > > > > > Componente > > > > > > <?xml version="1.0" encoding="utf-8"?> > > > > > > <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" > > > > > > xmlns:s="library://ns.adobe.com/flex/spark" > > > > > > xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300"> > > > > > > <fx:Declarations> > > > > > > <!-- Place non-visual elements (e.g., services, value objects) here > --> > > > > > > </fx:Declarations> > > > > > > <fx:Script> > > > > > > <![CDATA[ > > > > > > *public* *var* nome:String = *new* String(); > > > > > > ]]> > > > > > > </fx:Script> > > > > > > <mx:Image height="15" width="15" /> > > > > > > </s:Group> > > > > > > -- > > > > *Hélio Antonio Fransico Silva* > > > > Desenvolvedor web > > > > Certificado Flash developer > > > > Certificado Flash Design > > > > Certificado web developer > > > > Consultor Microsiga / Totvs > > > > Desenvolvedor ADVPL / ASP > > > > Analista de sistemas e ERP Sênior. > > > > > -- > > > 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 emhttp://groups.google.com/group/flexdev > > > > -- > > *Hélio Antonio Fransico Silva* > > Desenvolvedor web > > Certificado Flash developer > > Certificado Flash Design > > Certificado web developer > > Consultor Microsiga / Totvs > > Desenvolvedor ADVPL / ASP > > Analista de sistemas e ERP Sênior.- Hide quoted text - > > > > - Show quoted text - > > -- > 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 > -- Mario Junior http://blog.mariojunior.com/ @mariojunior -- 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
