Uma duvida aqui, se alguem souber responder, manda ve ai…
tenho um datagrid com suas colunas com um TextInput…
tem como eu mudar a cor de 1 textInput especifico, quando o item for editado,
a principal duvida é como alterar a cor do TextInput mesmo… depois que o grid foi criado…
abraço
vlws desde já ;D
ps: pelo ItemEdit tem como pegar o TextInput especifico e alterar sua cor? =P
Não querendo atrapalhar o tópico, mas…
André, por que você diz que sempre devo fazer numa classe separada (e ‘colocar’ em outra usando ou ClassFactory ou setando no itemRenderer)? Tem alguma diferença de performance, é só o código que fica mais organizado ou é porque ele vira meio ‘genérico’ e dá pra usar ele em vários outros lugares?
Acho que não tem muita diferença em performance não, André. Eu falo por questão de organização e reaproveitamento mesmo. Sem contar que o código fica bem confuso se você ficar declarando varios componentes dentro de um mesmo arquivo, fica mais difícil de entender.
Eu criaria elas no AS mesmo, como imagino que você já esteja fazendo. Aí teria meu renderer em uma classe separada e, na hora de criar a coluna dinamicamente, eu faria algo assim:
var column:DataGridColumn = new DataGridColumn();
column.itemRenderer = new ClassFactory(MyItemRenderer);
A unica dica de performance seria para você tomar cuidado com o ItemRenderer. Tente deixar ele o mais leve possível, pois DataGrid com muitos renderers podem se tornar pesados se eles não forem bem programados.
tenho uma função… que cria as colunas que eu preciso… Renderizadas…
public static function crieColuna(headerText:String, dataField:String, widht:uint,
textAlign:String, editable:Boolean = false):DataGridColumn{
var novaColuna:DataGridColumn = new DataGridColumn();
novaColuna.headerText = headerText;
novaColuna.dataField = dataField;
novaColuna.width = widht;
novaColuna.setStyle("textAlign",textAlign);
novaColuna.editable = editable;
novaColuna.itemRenderer = new ClassFactory(TextInputPerson);
return novaColuna;
}
O ambiente é esse então… agora vem a pergunta hehe…
se eu colocar um listener…
package
{
import mx.controls.TextInput;
public class MyItemRenderer extends TextInput
{
public function MyItemRenderer ()
{
super();
this.addEventListener(Event.CHANGE, onChange) //isso aqui não funfa huaeheuh
}
}
public function onChange(event:Event){
setStyle("backgroundColor", "yellow");
}
}
isso tem que acontecer em um textInput, quando for alterado o dado de um textInput especifico saka?
provavelmente to esquecendo o dispach, bom… é isso ai…
se alguem souber a solução… ahueueh
Se os ninja do flex ai souber a solução fico muito feliz
Esse é seu construtor. Mas o construtor não tem que ser do mesmo nome da classe? Em AS é diferente de Java isso?
Outra coisa. Se eu estiver errado em cima, tenta criar um método pra você chamar o event (ou melhor, pra você adicionar ele, em vez de adicionar no construtor).
hehe, eu tinha feito isso, achei que tava esquecendo alguma coisa…
tipo André, o itemRenderer devia fazer isso, sempre que tivesse alteração correto?
só que ele faz “as vezes” eu não sei o motivo, mais se eu ficar alterando alterando o grid, de vez enquando
ele entra e altera a cor, -__-’
Hummm, estranho… Mas deve ser algo referente ao seu projeto, pois nesse exemplo que fiz não acontece isso.
Você está alterando o dataProvider por algum motivo? Ou dando um myDataProvider.refresh() ou algo assim?
Isso faria ele desenhar os renderers novamente e perderia a cor.
Tome cuidado pois o FocusOut pode acontecer sem que o valor do textInput tenha sido alterado, e pelo que eu entendi você precisa trocar o style somente quando o texto é alterado.
Pode crer AUser, tava dando uma conversada com um amigo…
e ele falou pra dar um set do data mesmo… usando uma flag pra especificar…
se foi alterado ou não…
vou testar fazer dessa forma…
igual estsava tentando fazer, não tem como pelo que intendi …
por que o itemRenderer é reaproveitado…