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

Cannot read property 'negociacoes' of undefined

console mostra que negociacoes nao foi definida.

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

5 respostas
_template(model){
    // retornando uma template string   
    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>  

    `;
    // é necessário indicar o local onde esse html deve ser renderizado em index.html

}

class NegociacaoController {

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.update(this.ListaNegociacoes);


}  

adiciona(event) {

      event.preventDefault();  
      this._listaNegociacoes.adiciona(this._criaNegociacao());
      this._negociacoesView.update(this.ListaNegociacoes);
      console.log(this._listaNegociacoes.negociacoes);  
      this._limpaFormulario();

}

_criaNegociacao(){

  return new Negociacao(
    DateHelper.textoParaData(this._inputData.value),
    this._inputQuantidade.value,
    this._inputValor.value
    );


} 
_limpaFormulario(){ //_ representa que só a classe pode acessas esse método

  this._inputData.value = '';
  this._inputQuantidade.value = '1';
  this._inputValor.value = '0.0';

  this._inputData.focus();

}

}

Oi, Ricardo, tudo bem?

O problema está que você declarou this._listaNegociacoes mas está chamando como this.ListaNegociacoes. São duas formas diferentes de declaração, por isso, ele não enxerga o seu atributo. Em:

this._negociacoesView.update(this._listaNegociacoes);

E

this._negociacoesView.update(this._listaNegociacoes);

precisam ser declarados dessa forma, com o atributo privado, usando underline.

Testa e me fala se deu certo!

show de bola, Lais Funcionou.

Obrigado.

solução!

Oi, Ricardo, que bom! Se puder marcar como solucionada, pode ajudar outros alunos que possa tem o mesmo erro que você tem teve :}