Ir para conteúdo


Foto

namespace


  • Por favor, faça o login para responder
1 resposta neste tópico

#1 darkinhu

darkinhu

    Novato

  • Membros
  • PipPip
  • 14 posts

Postado 21 December 2007 - 17:15

Aê galera,

Alguém pode me dar uma definição para o namespace? Por um acaso o namespace encapsula dados para evitar conflito de variáveis? Se for isso, preciso acessar as variáveis e objetos como "namespace.variavel"?
Tipo, queria saber se, uma vez criado um namespace, as variáveis criadas dentro dele seriam usadas apenas para aquele namespace, ou seja, variáveis e métodos dentro daquele namespace não seriam lidos por outros namespaces dentro da mesma window.

O que tá acontecendo é que eu tenho dois dialogs com os mesmos nomes de variáveis e objetos, então quando eu manipulo variáveis e objetos de um dialog, essas mesmas variáveis e objetos são mudadas no outro dialog.

Não testei o uso de "namespace.variavel" para saber se vai mudar, mas achei meio "anti-prático" fazer isso, uma vez que o namespace já foi definido antes, o escopo daquela variável/objeto deveria ser único para o namespace não?

Desde já, agradeço a atenção!

Aguardo retorno,

Arlington

#2 WillianCarvalho

WillianCarvalho

    Member Avançado

  • Membros
  • PipPipPip
  • 33 posts
  • LocationAlfenas

Postado 26 December 2007 - 08:17

  A principal utilidade das namespaces você mesmo já citou, evitar conflito com nomes de variáveis e funções em uma classe.
  Mesmo usando namespace, só defina como público o que realmente for necessário, exponha somente o necessário (uma das regras principais de programação orientada a objetos).
  As variáveis e funções locais à classe podem ser acessadas normalmente e as mesmas que forem públicas são acessadas externamente utilizando o namespace.classe.função() (esta função pode retornar o conteúdo de uma variável ou como última opção ser a variável).

Ex:
//Criando namespace
Ext.namespace('Site');

//ComunicacaoServidor
Site.ChamadasServidor = function(){
    //Metodos privados
    //Mensagem de erro durante a requisicao
    var comunicacao_Erro = function(resposta){
        Ext.MessageBox.alert('Erro', 'Problema de Comunicaçãoo com o Servidor !');
    };
    
    //Mensagem de resposta do servidor apos atualizar conhecimento do chatterbot
    var salvar_Sucesso = function(resposta){
            Ext.MessageBox.alert('Mensagem do Servidor', resposta.responseText);        
    };
    
    //Criando metodos publicos
    return {
        //Metodo construtor da classe
        init: function(){
            //Nada a instanciar no carregamento da página
        },
            
        //Lista de imagens que existem no servidor
        listaImagens: new Ext.data.JsonStore({
            //Dados
            url: 'Php/getImagens.php',
            //Nó principal 
            root: 'imagens',
            //Campos
            fields: ['imagem']
        }),
        
        //Metodo responsavel por salvar a estrutura da tree view no servidor
        salvar: function(dados){
            var comunicacao = Ext.Ajax;            
			
            //Acicionando eventos a requisicao
            comunicacao.on('requestcomplete', function(conn, response, options){
                salvar_Sucesso(response);
				comunicacao.purgeListeners();
            });
            comunicacao.on('requestexception', function(conn, response, options){
                comunicacao_Erro(response);
				comunicacao.purgeListeners();
            });
            
            //Realizando a requisicao ao servidor
            comunicacao.request({
                //Metodo utilizado
                method: 'POST',
                //Script requisitado
                url: 'Php/set.php',
                //Tempo limite para resposta
                timeout: 100000,
                //Parametros enviados
                params: {
                    'tree': jsonTree
                },
                //Abortar requisicao atual se outra for feita
                autoAbort: true
            });
        } 
    }
}
();
//Adicionado a classe ao manipulador de eventos da ext, sendo instanciada quando o documento é carregado
Ext.EventManager.onDocumentReady(Site.ChamadasServidor.init, Site.ChamadasServidor, true);

Você acessaria externamente como:
  Site.ChamadasServidor.salvar('teste');
  comboBox.store = Site.ChamadasServidor.listaImagens; //só pra ilustrar o namespace

Espero que tenha esclarecido alguma coisa.  :)


"Ninguem é tão sábio que não possa aprender, nem tão inexperiente que não possa ensinar"




0 usuário(s) está(ão) lendo este tópico

0 membros, 0 visitantes, 0 membros anônimos