5
respostas

Can not read property 'split' of undefined

Quando eu executo o código no final da aula ele manda esse erro referente ao DataHelper1.js. O que está atrelado ao split é o parametro "texto" e ele é invocado no NegociacaoController1 na parte de adicionar uma nova negociação. Até onde consigo enxergar não há problemas de sintax em nenhum dos dois códigos, vou postar ambos aqui, para que alguém possa me tirar dessas trevas...

class DataHelper1{

    constructor(){
        throw new Error("DateHelper não pode ser instanciado")
    }

   static textoParaData(texto){

   return new Date(...texto.split('-').map(function(item, indice){

                if(indice==1){
                   return item - 1
                }else{
                return item
                }
            }));
    }
     static dataParaTexto(data){
     return `${data.getDate()}/ ${(data.getMonth()+1)}/${data.getFullYear()}`
    }

}

Eu seguida segue o código do NegociacaoController1.js

 class NegociacaoController1{

    constructor (){

        let $ = document.querySelector.bind(document);
        this._inputData = $("#data");
        this._inputQuantidade = $("#quantidade");
        this._inputValor = $("#valor");
        this._listaNegociacoes = new ListaNegociacoes();
        this._negociacoesView = new NegociacoesView($("#negociacoesView"));

        this._negociacoesView.uptodate(this._listaNegociacoes);


    }

    adiciona(event){
        event.preventDefault();



        this._listaNegociacoes.adiciona(this._criaNegociacao);
        this._negociacoesView.uptodate(this._listaNegociacoes);
        this._limpaFormulario();




            }
            _criaNegociacao(){
               return  new Negociacao(
                    DataHelper1.textoParaData(this._inputData.value),
                       this._inputQuantidade.value,
                       this._inputValor.value
                   );

            }

            _limpaFormulario(){
                this._inputData.value= "";
                this._inputQuantidade.value = 0;
                this._inputValor.value = 0;

                this._inputData.focus();
            }
         }

Obraigado pela atenção. PS Tenho lido em outras postagens que alguns instrutores pedem para que o código seja exibido no GitHub. Eu uso o VisualStudio e em todas as inicializações ele sugere que eu instale o github. Existe algum tutorial ou aula aqui no Alura que possa me auxiliar na instalação e uso do git? Desde já muito Obrigado...

5 respostas

Boa tarde, Valmyr! Como vai?

Isoladamente, de acordo com o que a mensagem de erro diz, o problema é que o JS não conseguiu fazer o split() pq o valor que está chegando pra ele é um undefined.

Mas pra descobrir a raiz do problema seria melhor se eu pudesse dar uma olhada no seu código completo! Daí vc poderia compartilhar seu projeto no google drive, dropbox ou no github e depois mandar o link aqui. Assim poderei te ajudar melhor!

Sobre o git, há um curso aqui na Alura sobre o assunto! Segue o link: https://cursos.alura.com.br/course/git

Muito obrigado desde já Gabriel. Eu refiz o código e apareceu outro problema indecifrável. Já pus o código de ponta cabeça e não achei. A mensagem de erro agora é "can not read property getDate for undefined" Na linha 19 no DataHelper1. Eu não consegui entender nem de onde vem o parametro data que está no dataParaTexto.

O metodo textoParaData recebe o "this._inputData.value" na linha 31 do arquivo NegociacaoController2.js, mas o dataParaTexto, não é citado em lugar nenhum do projeto. E como é nele que está o erro fiquei engessado.

Já copiei e colei todos os arquivos que está no disponíveis no curso nos meus para identificar de onde vem o erro mas não funcionou. Aqui está o link do meu projeto no DropBox.

https://www.dropbox.com/sh/fke4tqnfzkugjil/AABjT1yy-LfBfx9xO78W7jMSa?dl=0

Aguardo

Caro ,Valmyr! Como vai?

O seu método adicionar do ListaNegociacoes não está incluindo uma negociação e sim uma lista.

Boa Tarde Danilo Desculpe mas não entendi. O meu código da ListaNegociacoes.js está exatamente igual ao da aula. Eu já até copiei e colei, para ter certeza. Não encontrei o erro

class ListaNegociacoes{
    constructor(){
        this._negociacoes = [];
    }
    adiciona(negociacao){
         this._negociacoes.push(this._negociacoes)
    }
    get negociacoes(){
        return [].concat(this._negociacoes);
    }
}

O que eu deveria modificar e por que? Aguardo e já agradeço a ajuda.

No método adiciona quando você faz push em 'this._negociacoes' está adicionando a array de negociacoes e não a negociação passada no parâmetro do método.

    adiciona(negociacao){
         this._negociacoes.push(negociacao)
    }