Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro criando <tbody> no NegociacoesView

Olá pessoal,

Estou com uma dúvida no final da Aula 5. Quando eu executo a página, recebo o erro:

Uncaught TypeError: Cannot read property 'negociacoes' of undefined at NegociacoesView._template (NegociacoesView.js:22) at NegociacoesView.update (NegociacoesView.js:47) at new NegociacaoController (NegociacaoController.js:11) at index.html:53

Percebi que se eu retirar a parte de criar o tbody para a tabela, no NegociacoesView, tudo roda (sem a tabela claro). Olhei o código e não consigo encontrar o problema com o 'negociacoes'. Está assim:

<tbody>
                ${model.negociacoes.map(n => `

                    <tr>
                        <td>${DateHelper.dataParaTexto(n.data)}</td>
                        <td>${n.quantidade}</td>
                        <td>${n.valor}</td>
                        <td>${n.volume}</td>
                    </tr>

                `).join('')}                
            </tbody>

E a classe ListaNegociacoes está assim:

class ListaNegociacoes {

    constructor() {

        this._negociacoes = [];
    }

    adiciona(negociacao) {

        this._negociacoes.push(negociacao);
    }

    get negociacoes() {

        return [].concat(this._negociacoes);
    }
}

Alguém sabe como me tirar da escuridão?

Agradeço toda atenção e ajuda!

(subi o projeto completo https://github.com/gtonussi/javascript-es6)

3 respostas
solução!

É só ir voltando no erro, provavelmente nesse caso o erro está no model passado para a View, ou seja, verifique como você está passando o model no Controller. Se você for no seu controller, vai ver que você passou pro update no constructor, o modelo:

 this._negociacoesView.update(this._ListaNegociacoes);

com o "L" maiusculo, mas em cima no constructor você declarou como:

this._listaNegociacoes = new ListaNegociacoes();

com "L" minusculo.

Ou seja, model.negociacoes é undefined, já que voce passou pra ele um objeto undefined, nesse caso o "this._ListaNegociacoes". Não rodei aqui para ver se tinha mais algum erro, altere isso e qualquer coisa mandar aqui de novo!

Valeu :D

Poxa muito obrigado amigo, realmente funcionou.

Estava declarando em dois momentos com letra maiúscula. Troquei, e está rodando direitinho.

Obrigado meu caro!!

Opa, Giovanni! Como vai?

Não deixe de marcar a solução do coleguinha para fecharmos o tópico com chave de ouro! Assim se alguém no futuro tiver o mesmo problema ou algo similar, conseguirá encontrar a resposta!

Grande abraço e bons estudos, meus alunos!