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

Parâmetro model

Depois que utilizamos a estratégia da armadilha não entendi onde o parâmetro (model) é passado, ou seja, em que momento na execução da função esse parâmetro é selecionado e transmitido para a função principal. this._listaNegociacoes = new ListaNegociacoes(model => this._negociacoesView.update(model));

3 respostas

Em qual parte desta aula você está? Compartilhe seu código mostrando com um comentário o ponto da sua dúvida.

Não ficou claro para mim sua duvida.

class NegociacaoController {

    constructor() {
      // Bind mantém a associação com document
      // Criar as propriedades no contructor para evitar percorrer o DOM em cada iteração
         let $ = document.querySelector.bind(document);
      this._inputData = $('#data');
      this._inputQuantidade = $('#quantidade');
      this._inputValor = $('#valor');

      //this._listaNegociacoes = new ListaNegociacoes();     
      // A DÚVIDA ENTRA AQUI
      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);

      }

Mas dando continuidade no curso vi que essa solução será mudada, então a dúvida deste post pode ser desconsiderada. ;)

solução!

Mesmo assim, não custa nada eu tirar a sua dúvida. Vamos lá.

Temos a seguinte instrução:

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

Essa instrução esta passando para o constructor de ListaNegociacoes uma função que ao ser chamada recebe um parâmetro. No caso, eu chamei o nome do parâmetro de model, mas poderia ser qualquer nome, pois em JavaScript quem escolhe o nome do parâmetro da função somos nós. Mas por que eu usei a palavra model?

Vamos olhar a definição da classe ListaNegociacoes:

class ListaNegociacoes {

  constructor(armadilha) {

        this._negociacoes = [];
        this._armadilha = armadilha;
  }
  adiciona(negociacao) {
      this._negociacoes.push(negociacao);
      this._armadilha(this);
  }

  get negociacoes() {
      return [].concat(this._negociacoes);
  }

  esvazia() {
      this._negociacoes = [];
      this._armadilha(this);
  }

//...

Veja que o parâmetro do constructor da classe recebe uma armadilha como parâmetro, que nada mais é que uma função.

Então, o valor de armadilha será a função model => this._negociacoesView.update(model) porque é ela que estou passando para o seu constructor.

Agora, veja o método:

  adiciona(negociacao) {
      this._negociacoes.push(negociacao);
      this._armadilha(this);
  }

Quando o adiciona é chamado, ele chamará a função definida em this._armadilha. E quando chamar essa função, passará um parâmetro. Que parâmetros é esse? É this. O this é quem? A instância da classe que esta executando a operação. Essa instância não é um model? Então é ela que é recebida em model => this._negociacoesView.update(model)

Consegui clarear as ideias?