JavaScript

4 respostas
Chuvinha

Galera, não manjo mto de javaScript e peguei um projeto que tem essa função mas não sei o que ela faz.
Sei que tá usando Ext, mas não entendi direito.

function onClickPanel(node){ var genericGrid = null; var nodeText = replaceAll(node.text," ",""); alert('genericGrid = Grid_'+nodeText); if(Ext.getCmp('wholeView').findById('centerPanel').findById(node.text.toLowerCase())==null){ eval('genericGrid = Grid_'+nodeText); Ext.getCmp('wholeView').findById('centerPanel').add( { title: node.text, id: node.text.toLowerCase() , layout:'fit', closable : true, items: [genericGrid.grid()] } ); } }

Será que alguém poderia me explicar o que essa função faz?

4 Respostas

davidbuzatto

Bem, eu não uso o ExtJS assim, mas vamos lá.

// uma função, provavelmente um manipulador de eventos
function onClickPanel( node ) {

    // uma variável
    var genericGrid = null;

    // outra variável, recebendo o valor do texto do  sem espaços
    var nodeText = replaceAll(node.text," ","");

    // mostra um alert com o novo texto do 
    alert('genericGrid = Grid_'+nodeText);

    // bem, aqui  começa a bagunça
    // esse monte de findById encadeado é nojento.
    // o ideal seria que cada "coisa" obtida no findById fosse um componente do Ext, ai não
    // precisaria fazer essa sujeira, bastando apenas usar o Ext.getCmp, que a propósito
    // é usado para obter uma referência ao componente do Ext que tem como id o valor passado
    // pela função Ext.getCmp (getComponent)

    // enfim, aqui é verificado se NÃO existe um componente que tenha como id o valor do texto do 
    if( Ext.getCmp('wholeView').findById('centerPanel').findById(node.text.toLowerCase())==null){

        // nojento... usando eval para atribuir valor em uma variável
        // isso é feito pq provavelmente devemm haver variáveis globais com o prefixo "Grid_".
        // eu não faria assim.

        // falo que é nojento pq é difícil de ler para quem é iniciante, além de deixar o código uma bagunça.
        eval('genericGrid = Grid_'+nodeText);

        // mais uma vez o findById
        // ao encontrar o componente "centerPanel"
        // adiciona um novo objeto com as propriedades abaixo.

        // normalmente no ExtJS usa-se uma propriedade chama xtype p/ 
        // informar à "engine" do Ext que tipo de componente vc está adicionando
        // além de deixar mais claro o que está acontecendo para quem vai manter o código
        // a adicção de componenets sem o a propriedade xtype varia de container para container
        // ai vc precisav er a documentação.
        Ext.getCmp('wholeView').findById('centerPanel').add({
            title: node.text,
            id: node.text.toLowerCase() ,
            layout: 'fit',
            closable: true,
            items: [
                genericGrid.grid()
            ]
        });
    }
}

Onde vc copiou esse código? Muito confuso e cheio de más práticas.

[]´s

Chuvinha

Então David, esse código tá no projeto que eu to fazendo aqui no trampo.
Eu tenho o viewPort e dentro dele 2 panels: leftPanel e centerPanel (na verdade o centerPanel é um tabPanel).
No leftPanel eu tenho uma lista e quando o usuário clica em algum nó da árvore eu tenho que abrir uma aba no centerPanel.
Meu código está assim:

<ext:tree.treePanel id="leftPanel_Conteudo_Digital" title="Conteúdo Digital" listeners="{click: onClickPanel}" draggable="false" border="false" > <ext:tree.treeLoader dataUrl="conteudodigital.action" /> </ext:tree.treePanel>

Os nós da árvore são carregados na minha conteudoDigital.jsp
Minha dúvida é como chamar o metodo onClickPanel e passar como parametro o nome do Nó.
Vc poderia me ajudar?

davidbuzatto

Olá,

Primeiro de tudo. Pare de usar essa taglib do ExtJS. Não sei nem quando isso ai foi alterado pela última vez. Ainda tem gente que mantém essa taglib??? A versão do site é relativa ao ExtJS 2.0! Já está quase na versão 4.0. Codifique na mão o JavaScript e baixe a biblioteca do site oficial.

Segundo, recomendo vc ler a documentação e usá-la como base para trabalhar com o ExtJS.

[]´s

Chuvinha

Putz David, eu não posso mudar.
Foi definido que usariamos essa taglib, juntamente com o JSON e Java.
Vou ter que me virar pra fazer funcionar.
Se puder me ajudar, agradeceria mto amigo

Criado 19 de agosto de 2010
Ultima resposta 19 de ago. de 2010
Respostas 4
Participantes 2