Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

NegociacoesView.js:21 Uncaught TypeError: Cannot read property 'map' of undefined

Após executar a tarefa do último exercicio eu recebo o erro do map. Porém eu loguei no console a lista de negociacoes e o proxy aparece corretamente no browser. Abaixo um trecho do código em NegociacaoController.js e depois o trecho de NegociacoesView.js

Se alguém puder me ajudar o trecho onde estou errado agradeço.

NegociacaoController.js :

        let self = this;

        this._listaNegociacoes = new Proxy(new ListaNegociacoes(), {
            get (target, prop, receiver){
                if(['adiciona','esvazia'].includes(prop) && typeof(target[prop]) == typeof(Function)){
                    return function(){
                        console.log(`Interceptando ${prop}`);
                        Reflect.apply(target[prop], target, arguments);  
                        self._negociacoesView.update(target);
                    }
                }

        return Reflect.get(target, prop, receiver);
            }
        });

        console.log(this._listaNegociacoes);

        this._negociacoesView = new NegociacoesView($('#negociacoesView'));
        this._negociacoesView.update(this._listaNegociacoes);

NegociacoesView.js :

      class NegociacoesView extends View {

    constructor(elemento) {
        super(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 => `

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

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

            <tfoot>
                <td colspan="3"></td>
                <td>
                    ${model.negociacoes.reduce((total, n) => total + n.volume, 0.0)}
                </td>
            </tfoot>

        </table>
        `;
    }
}

View.js :

class View {

    constructor(elemento) {

        this._elemento = elemento;
    }

    template() {

        throw new Error('O método template deve ser implementado');
    }

    update(model) {

        this._elemento.innerHTML = this.template(model);
    }
}
1 resposta
solução!

Bem, pessoal, ao comparar com o código baixado das aulas verifiquei que eu ainda não havia apagado a linha abaixo no método 'adiciona' da classe NegociacaoController.js. Fiz a remoção da linha e agora está tudo ok

this._negociacoesView.update(this._listaNegociacoes);