2
respostas

Uncaught TypeError: Cannot read property 'negociacoes' of undefined

Não entendo, 'negociacoes' está settado em 'ListaNegociacoes()':

class ListaNegociacoes {

    constructor() {

        this._negociacoes = [];
    }

    adiciona(negociacao) {

        this._negociacoes.push(negociacao);
    }

    get negociacoes() {

        return [].concat(this._negociacoes); //forma de impedir que negociacoes sejam adicionadas fora da classe
    }
}

Um colega alegou que resolveu o mesmo problema adicionando um '', porém adicionei (mesmo sem enxergar muito bem o motivo): '${model.negociacoes.map(n =>' e o erro permaneceu. A classe 'NegociacaoViews()':

class NegociacoesView {

    constructor(elemento) {

        this._elemento = elemento;
    }

    _template(model) {

    return `
        <table class="table table-hover table-bordered">
            <thead>
                <tr>
                    <th>DATA</th>
                    <th>QUANTIDADE</th>
                    <th>VALOR</th>
                    <th>VOLUME</th>
                </tr>
            </thead>

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

                    return `
                        <tr>
                            <td>${DateHelper.dataParaTexto(n.data)}</td>
                            <td>${n.quantidade}</td>
                            <td>${n.valor}</td>
                            <td>${n.volume}</td>
                        </tr>
                    `
                }).join('')}
            </tbody>

            <tfoot>
            </tfoot>
        </table>
    `
    }

    update(model) {

        this._elemento.innerHTML = this._template();

    }
}
2 respostas

Um colega alegou que resolveu o mesmo problema adicionando um 'underline' == ${model._negociacoes.map(n =>'

Fala ai Camila, tudo bem? O problema pode ser na chamada da função NegociacoesView, verifique se está sendo passado um array de negociações para a função update.

Se quiser, adicione um log no mesmo:

update(model) {
    console.log(model)
    this._elemento.innerHTML = this._template();
}

Provavelmente em algum momento será logado undefined, nesse ponto é onde o array não está sendo enviado.

Espero ter ajudado.