Eu também gosto de usar somente uma classe para trabalhar com icones e
assets em geral por um simples motivo: injeção de assets. Não preciso
recompilar o módulo inteiro apenas porque troquei um asset, simplesmente
recompilo o SWF com os assets que serão usados para aquele módulo. Fiz até
um vbs para dar embed em todas as imagens de uma pasta! rs

Além disso para componentes de lista (como o Tree) temos uma propriedade
chamada iconFunction que recebe uma função que vai receber o item da lista e
retornar a classe do asset.

Segue aí um exemplo:

http://labs.asflake.com/TesteEmbed.zip

--
Gustavo Y. Kawamoto


2010/1/14 RafaelViana <rfl.vi...@gmail.com>

> Não entendi de passar o nomecompleto, namespace, nome da classe....
>
> Crio uma classe IconesSistema.Toda vez chamo IconesSistema.icon_home,
> IconesSistema.icon_cliente, ....
> Acho mais fácil do que ter que criar um objeto class colocar o embed
> nele...
> Essa apenas seria para ter esse class e embed em uma classe separada,
> não muda nada.Apenas acho mais fácil.
>
> A função no seu caso faria a mesma coisa, a única diferença é que você
> não sabe o nome da variável que quer acessar, pois é dinâmica apenas
> use a string (que tem que vir de qualquer jeito), para retornar o
> class certo.
>
> Repito serve apenas para evitar a criação da variável das clientes
> porque acho mais fácil fazê-la em um lugar apenas uma vez.Caso não se
> importe com o trabalho de criar a variável (que é minimo) pode fazer
> normalmente, cada um tem suas opiniões e jeitos de programar.
>
> On 14 jan, 18:35, Júlio César Ködel <jcko...@gmail.com> wrote:
> > Não é uma boa anternativa, nenhuma das duas.
> >
> > Passar o nome completo do ícone é inviável, já que o transporte é muito
> > custoso (imagine um combo com 100 itens, cujo namespace + nome da classe
> > tenham 30 bytes, isso adiciona pelo menos 3000 bytes a mais no
> transporte).
> > E, como sabemos, qualquer migalha conta quando temos bottleneck =)
> >
> > A outra solução é justamente o que o Flex faz... então criar uma classe
> > extra para fazer uma função que ele já faz por natureza me parece meio
> > reinventar a roda =\
> >
> > Como os testes mostraram que realmente ele não duplica assets, creio que
> não
> > haja problemas em manter algumas variáveis dentro do escopo.
> >
> > Outra coisa que estou pensando aqui... gerar estes arquivos de assets
> > dinamicamente, ou seja, ler toda a pasta de assets e montar uma classe
> com
> > todos eles embeded... usando Visual Studio e Tofino fica super fácil...
> se
> > fizer isso depois posto os resultados.
> >
> > 2010/1/14 RafaelViana <rfl.vi...@gmail.com>
> >
> >
> >
> >
> >
> > > Olha teria que testar mas acho que é:
> >
> > > NomeDaClasse.NomeDaVariavel - ex: Icones.Foo
> >
> > > Agora dinamicamente teria que testar se não vai dar problema na
> > > compilacao por estar setando o nome da variavel em tempo de execução,
> > > teria que dar uma olhada em criar nome dinâmico da variável com o
> > > operador this[]
> >
> > > Ou então mais fácil ainda em vez de pegar direto a referencia do
> > > ícone, faça um método nessa classe que receba uma string e retorne um
> > > class. (pode ser usada até com os icones que não são dinâmicos já que
> > > fica fácil de usar) ex:
> >
> > > public static function selecionarIcone(s:String):Class {
> >
> > > switch(s) {
> >
> > > case "icone_teste" : return icone_teste;
> > > case "icone_2" : return icone_2;
> > > .....
> >
> > > }
> >
> > > <item label="Label" icon="{Icones.selecionarIcone("icone_teste")}"/>
> >
> > > obs: essas string podem ser constantes dessa classe para evitar erros.
> >
> > > Se testar nos responda o resultado
> >
> > > On 14 jan, 17:42, Júlio César Ködel <jcko...@gmail.com> wrote:
> > > > Neste caso, como você converte um campo String, por exemplo, vindo do
> > > > servidor em um databind para o ícone?
> >
> > > > Ex.: tenho um combo que é preenchido por um XML server-side, contendo
> > > > elementos como <item label="Label" icon="Foo"/>
> >
> > > > Quando há uma variável "Foo" do tipo Class dentro da classe onde o
> combo
> > > se
> > > > encontra, ele automaticamente usa isso como ícone da opção do combo,
> mas
> > > se
> > > > não encontrar, levanta uma exceção.
> >
> > > > Colocar as imagens em uma classe separada funcionaria como? Alterar
> > > > icon="Foo" para icon="Namespace.Classe.Foo"?
> >
> > > > 2010/1/14 RafaelViana <rfl.vi...@gmail.com>
> >
> > > > > Eu pelo menos tenho uma classe IconesSistema onde todas as imagens
> > > > > estão Embed e estáticas assim FACILITAR na hora de obter acesso a
> > > > > elas.
> >
> > > > > No seu caso eu tiraria o bindable, pois ele é desnecessário nesse
> > > > > caso.
> >
> > > > > On 14 jan, 16:39, Mateus <mateusch...@gmail.com> wrote:
> > > > > > Muito Obrigado,
> >
> > > > > > fiz o seguinte teste, fiz o Embed de uma imagem de 1,24 mb, e o
> .SWF
> > > > > aumento
> > > > > > nesse tamanho, ai repeti o processo em diverso locais da
> aplicação e
> > > não
> > > > > > aumentou mais o tamanho do .SWF.
> >
> > > > > > e depois qundo removi, apenas diminuiu apenas quando removi todas
> as
> > > > > > referencias.
> >
> > > > > > 2010/1/14 Júlio César Ködel <jcko...@gmail.com>
> >
> > > > > > > Eu tive esta mesma preocupação há algum tempo e, pelo que li, o
> > > Flex
> > > > > não
> > > > > > > repete embeded assets, ou seja, não importa quantas vezes você
> faz
> > > um
> > > > > > > [Embed(imagem)], a Class sempre apontará para o mesmo recurso.
> >
> > > > > > > Mas não cheguei a testar se isso é verdade. Um teste que
> poderia
> > > ser
> > > > > feito
> > > > > > > é inserir uma imagem gigantesca (por exemplo, um papel de
> parede em
> > > > > BMP) e
> > > > > > > verificar o tamanho do SWF gerado, aí inserir a mesma imagem em
> > > outros
> > > > > > > locais várias vezes e verificar se há um aumento significativo
> no
> > > > > tamanho do
> > > > > > > arquivo gerado (ou utilizar um descompilador SWF para ver se o
> > > asset se
> > > > > > > repete)
> >
> > > > > > > Isso porque há certos casos que os assets devem estar
> acessíveis na
> > > > > mesma
> > > > > > > classe que o utilizam (ex.: iconField em um combo).
> >
> > > > > > > As imagens físicas em si eu geralmente deixo todas na mesma
> pasta
> > > (se o
> > > > > > > aplicativo acessa uma library, o que é sempre uma boa idéia,
> > > > > especialmente
> > > > > > > quando se usa módulos, eu deixo todos os assets nesta library e
> > > acesso
> > > > > os
> > > > > > > arquivos com caminhos relativos (ex.:
> > > > > ../../library/assets/images/icons/16))
> >
> > > > > > > 2010/1/14 Mateus <mateusch...@gmail.com>
> >
> > > > > > >>  Pessoal
> >
> > > > > > >> Estou desenvolvendo um ERP aqui, e a quandidade de imagens
> esta
> > > > > crecendo,
> > > > > > >> gostaria de saber de vocês qual é a melhor maneira de se
> utilizar
> > > > > imagens no
> > > > > > >> flex?
> > > > > > >> Estou utilizando da seguinte maneira
> > > > > > >>         Bindable]
> > > > > > >>         [Embed("imagens/favicon.png")]
> > > > > > >>             private var buttonTitle:Class;
> >
> > > > > > >> Estava pensado em criar uma super classe e fazer o Embed de
> todas
> > > as
> > > > > > >> imagens od sistema em um unico local, e uam unica vez, e
> depois
> > > apena
> > > > > > >> sutilizar essa classe, é a melhor maneira de fazer isso?
> > > > > > >> --
> > > > > > >> __________________________________
> > > > > > >> Att.
> > > > > > >> Mateus André Chies
> > > > > > >> Analista e Desenvolvedor de Sistemas
> > > > > > >> Bacharelando em SI - SETREM
> > > > > > >>http://mateuschies.blogspot.com
> >
> > > > > > >> "Viver é desenhar sem borracha." (Millôr Fernandes)
> >
> > > > > > >> --
> > > > > > >> Você recebeu esta mensagem porque está inscrito na lista
> "flexdev"
> > > > > > >> Para enviar uma mensagem, envie um e-mail para
> > > > > flexdev@googlegroups.com
> > > > > > >> Para sair da lista, envie um email em branco para
> > > > > > >> flexdev-unsubscr...@googlegroups.com
> > > > > > >> Mais opções estão disponíveis emhttp://
> > > > > groups.google.com/group/flexdev
> >
> > > > > > > --
> > > > > > > []
> > > > > > > Júlio César Ködel G.
> >
> > > > > > > --
> > > > > > > Você recebeu esta mensagem porque está inscrito na lista
> "flexdev"
> > > > > > > Para enviar uma mensagem, envie um e-mail para
> > > > > flexdev@googlegroups.com
> > > > > > > Para sair da lista, envie um email em branco para
> > > > > > > flexdev-unsubscr...@googlegroups.com
> > > > > > > Mais opções estão disponíveis emhttp://
> > > groups.google.com/group/flexdev
> >
> > > > > > --
> > > > > > __________________________________
> > > > > > Att.
> > > > > > Mateus André Chies
> > > > > > Analista e Desenvolvedor de Sistemas
> > > > > > Bacharelando em SI - SETREMhttp://mateuschies.blogspot.com
> >
> > > > > > "Viver é desenhar sem borracha." (Millôr Fernandes)
> >
> > > > > --
> > > > > Você recebeu esta mensagem porque está inscrito na lista "flexdev"
> > > > > Para enviar uma mensagem, envie um e-mail para
> > > flexdev@googlegroups.com
> > > > > Para sair da lista, envie um email em branco para
> > > > > flexdev-unsubscr...@googlegroups.com
> > > > > Mais opções estão disponíveis emhttp://
> groups.google.com/group/flexdev
> >
> > > > --
> > > > []
> > > > Júlio César Ködel G.
> >
> > > --
> > > Você recebeu esta mensagem porque está inscrito na lista "flexdev"
> > > Para enviar uma mensagem, envie um e-mail para
> flexdev@googlegroups.com
> > > Para sair da lista, envie um email em branco para
> > > flexdev-unsubscr...@googlegroups.com
> > > Mais opções estão disponíveis emhttp://groups.google.com/group/flexdev
> >
> > --
> > []
> > Júlio César Ködel G.
>
> --
> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
> Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
> Para sair da lista, envie um email em branco para
> flexdev-unsubscr...@googlegroups.com
> 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 flexdev@googlegroups.com
Para sair da lista, envie um email em branco para 
flexdev-unsubscr...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev

Responder a