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

O meu NegociacaoController não funciona

Segui os passos, mas tenho o seguinte erro: ListaNegociacoes.js:13 Uncaught TypeError: this._armadilha is not a function at ListaNegociacoes.adiciona (ListaNegociacoes.js:13:14) at NegociacaoController.adiciona (NegociacaoController.js:31:32) at HTMLFormElement.onsubmit (index.html:16:93)

Onde estou errando?

NegociacaoController.js class NegociacaoController {

constructor() {

    let $ = document.querySelector.bind(document);
    this._inputData = $('#data');
    this._inputQuantidade = $('#quantidade');
    this._inputValor = $('#valor');

    /*
    this._listaNegociacoes = new ListaNegociacoes(function(model){
        this._negociacoesView.update(model);
    });
    */

    this._listaNegociacoes = new ListaNegociacoes(model =>
        this._negociacoesView.update(model));

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

    this._mensagem = new Mensagem();
    this._mensagemView = new MensagemView($('#mensagemView'));
    this._mensagemView.update(this._mensagem);

}

adiciona(event) {

    event.preventDefault();
    this._listaNegociacoes.adiciona(this._criaNegociacao());

    this._mensagem.texto = 'Negociação adicionada com sucesso';
    this._mensagemView.update(this._mensagem);

    this._limpaFormulario();   
}

apaga() {

    this._listaNegociacoes.esvazia();

    this._mensagem.texto = 'Negociações apagadas com sucesso';
    this._mensagemView.update(this._mensagem);
}

_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();   
}

}

ListaNEgociacoes.js class ListaNegociacoes {

constructor(contexto, armadilha) {

    this._negociacoes = [];
    this._armadilha = armadilha;
    this._contexto = contexto;
}

adiciona(negociacao) {

    this._negociacoes.push(negociacao);
    this._armadilha(this);
    //Reflect.apply(this._armadilha, this._contexto, [this]);
}

get negociacoes() {

    return [].concat(this._negociacoes);
}

esvazia() {

    this._negociacoes = [];
    this._armadilha(this);
    //Reflect.apply(this._armadilha, this._contexto, [this]);
}

}

2 respostas
solução!

Descobri o motivo:

No Constructor do ListaNegociacoes, ainda estava recebendo o contexto, ao excluir esse item, funcionou.

Oi Jorge, tudo bem?

Muito obrigada por compartilhar com a gente o a solução do problema, com certeza vai ajudar muita gente!

Um abraço e bons estudos. :D

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software