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

getDate undefined

Boa tarde, Estou com um problema parecido com o deste tópico https://cursos.alura.com.br/course/spring-mvc-1-criando-aplicacoes-web/task/11454, contudo o meu return está correto

Uncaught TypeError: Cannot read property 'getDate' of undefined
    at Function.dataParaTexto (DataHelper.js:7)
    at model.contas.map.n (ContasView.js:21)
    at Array.map (<anonymous>)
    at ContasView._template (ContasView.js:18)
    at ContasView.update (ContasView.js:35)
    at ContasController.adiciona (ContasController.js:20)
    at HTMLFormElement.onsubmit (index.html:16)

Contas Controller

class ContasController{

    constructor(){
         let $ = document.querySelector.bind(document);

         this.inputNome = $('#nomeDaConta');
         this.inputVencimento = $('#vencimento');
         this.inputValor = $('#valor');
         this.inputParcelas = $('#parcelas');    

         this._listaContas = new ListaContas();

         this._contasView = new ContasView($('#contasView'));
         this._contasView.update(this._listaContas);
    }
    adiciona(event){
        event.preventDefault();
        //let vencimento = new Date(this._inputData.value.replace(/-/g,','));
          this._listaContas.adiciona(this._criaContas);
          this._contasView.update(this._listaContas);

         this._limpaFormulario();



    }
    _criaContas(){
        return  new Contas(
            this.inputNome.value,
            DataHelper.textoParaData(this._inputVencimento.value),
            this.inputValor.value,
            this.inputParcelas.value);


    }
    _limpaFormulario(){
        this.inputVencimento.value = '';
        this.inputNome.value = '';
        this.inputValor = 0;
        this.inputParcelas = 0;

        this.inputNome.focus();
    }
}

Contas view

class ContasView{
    constructor(elemento){
        this._elemento = elemento;
    }
    _template(model){
        return `
        <table class="table table-hover     table-bordered">
        <thead>
                <tr>
                    <th>Nome</th>
                    <th>Vencimento</th>
                    <th>Valor</th>
                    <th>Parcelas</th>
                </tr>
            </thead>

            <tbody>
                ${model.contas.map(n => `
                        <tr>
                        <td>${n.nomeDaConta}</td>
                        <td>${DataHelper.dataParaTexto(n.vencimento)}</td>
                        <td>${n.valor}</td>
                        <td>${n.parcelas}</td>
                        `).join('')}
            </tbody>

            <tfoot>
            </tfoot>
        </table>

        `;
    }
    update(model) {

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

DataHelper

class DataHelper{

    constructor(){
        throw new Error('Está classe não pode ser instanciada');
    }
    static dataParaTexto(vencimento){
         return `${vencimento.getDate()}/${vencimento.getMonth()+1}/${vencimento.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!

achei o erro, estava this.listaContas.adiciona(this.criaContas);

o certo é this.listaContas.adiciona(this.criaContas()); esqueci de colocar os ()