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

getData is not a function

Bom estou com o seguinte erro na hora de gerar a view dos dados da tabela: DateHelper.js:10 Uncaught TypeError: data.getData is not a function at Function.dataParaTexto (DateHelper.js:10) at model.negociacoes.map.n (NegociacoesView.js:25) at Array.map () at NegociacoesView._template (NegociacoesView.js:22) at NegociacoesView.update (NegociacoesView.js:41) at NegociacaoController.adiciona (NegociacaoController.js:20) at HTMLFormElement.onsubmit (index.html:14)

Vou enviar minhas classes para olharem, eu realmente não consegui identificar o erro

NegociaçõesView

class NegociacoesView  {

  constructor(element) {

    this._element = element;
  }

  _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._element.innerHTML = this._template(model);
  }

}</td>

NegociacaoController

class NegociacaoController {

    constructor() {

        let $ = document.querySelector.bind(document); //Busca uma única vez
        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);
        this._limpaFormulario();

    }

    _criaNegociacao() {

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

    _limpaFormulario() {

        this._inputData.value = '';
        this._inputQuantidade.value = 1;
        this._inputValor.value = 0.0;
        this._inputData.focus();
    }
}

DateHelper

class DateHelper {

    constructor() {

        throw new Error('Esta classe não pode ser instanciada')
    }

    static dataParaTexto(data) {

        return `${data.getData()}
            /${data.getMonth() + 1}
            /${data.getFullYear()}`;

    }

    static textoParaData(texto) {

        if(!/\d{4}-\d{2}-\d{2}/.test(texto))
            throw new Error('Deve estar no formato aaaa-mm-dd');

        return new Date(...texto.split('-')
                        .map((item, indice) => item - indice % 2));

    }

}
1 resposta
solução!

Observando bem o que eu fiz, foi um erro grotesco de digitação.

Realmente não existe um método getDatA.

O nome do método correto seria getDatE.