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

Acesso as propriedades do constructor

Estava mexendo no código do projeto, e me deparei com uma questão: Se eu passo um método como callback de uma função, dentro desse método eu não consigo acessar as propriedades do constructor, por exemplo:

Criei um método que retira a mensagem de negociação:

_retirarMensagem() {
    this._$('#mensagemView').innerHTML = '';
  }

E aí chamei esse método dentro de um setTimeout pra essa funcionalidade acontecer depois de algum tempo:

setInterval(this._retirarMensagem, 2000);

( Tentei usar outras propriedadades do constructor além do $, e todas deram o mesmo resultado )

O código imediatamente acima está dentro do método adiciona():

adiciona() {
    this._form.addEventListener('submit', event => {
      event.preventDefault();

      this._listaNegociacoes.adicionaNegociacoes(this._criarNegociacao());

      this._mensagem.text = 'Negociação adicionada com sucesso!';

      this._mensagemView._update(this._mensagem);
      this._negociacoesView._update(this._listaNegociacoes);

      setTimeout(this._retirarMensagem, 2000);

      this._limparForm();
    });
  }

Quando eu tento rodar, dá erro de undefined, ou retorna undefined mesmo. Qual o motivo pra isso? Estou fazendo algo errado?

2 respostas

Lucas, boa tarde!

Ao usar o this._$('#mensagemView') ele vai buscar uma variável dentro dessa classe que tenha o nome _$('#mensagemView') acredito que nesse caso basta acessar o elemento diretamente e limpar a mensagem dele, como no exemplo abaixo:

_retirarMensagem() {
    $('#mensagemView').innerHTML = '';
  }

Ou poderia ser também:

_retirarMensagem() {
    this._mensagem.innerHTML = '';
  }

Mas nesse segundo caso haveria a necessidade de um atributo chamado mensagem no seu construtor com a implementação abaixo

constructor(){
this._mensagem = $('#mensagemView');

Espero ter ajudado e bons estudos!

solução!

Resolvi. Não sei exatamente o motivo, mas no caso de passar o método como callback do setTimeout, eu não posso passar o método como uma função ?? O código fica assim :

setTimeout(() => this._retirarMensagem(), 2000);

Crio uma anonymous function dentro do setTimeout e daí dentro dessa função eu chamo o método.

Provavelmente alguma confusão entre funções e métodos, que são a mesma coisa, mas mudam dependendo do contexto. Enfim, fica aí a dica pra qualquer pessoa que esteja passando pelo mesmo problema.