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

O que é o model?

Prezados,fique com duvidas na Aula 03 - At.01. Na declaração do código

  this._mensagem = ProxyFactory.create(
            new Mensagem(),
            ['texto'],
            model=>this._mensagemView.update(model)
        )

mais precisamente no model=>this._mensagemView.update(model), eu passo um model que de fato é o modelo, mas eu não tenho na aplicação nenhuma variável model, minha duvida é ele pega isso do this._negociacoesView.update(this._listaNegociacoes)? O javascript guarda a referencia de this._listaNegociacoes?

2 respostas

Olhe o código fonte do método create. Lá ha um callback que recebe o modelo passado para o método. No seu exemplo model é a instância da classe Mensagem. Ajudou?

Se não ajudou, me fala que dou outra explicação. No smartphone. ..ruim pra digitar.

solução!

Opa, agora no meu computador ficar mais fácil. Veja o método:

static create(objeto, props, acao) {

        return new Proxy(objeto, {

            get(target, prop, receiver) {

                if(props.includes(prop) && ProxyFactory._ehFuncao(target[prop])) {
                    return function() { 
                        Reflect.apply(target[prop], target, arguments);
                        return acao(target); // OLHA AQUI.... ESTA CHAMANDO SUA FUNCAO PASSANDO TARGET QUE E ACESSADO VIA MODEL NO SEU CALLBACK
                    }
                }
                return Reflect.get(target, prop, receiver);       
            }
        })
    }

O método create recebe 3 parâmetros, objeto para o qual desejamos criar o proxy (pode lê-lo como model...), as propriedades monitoradas e o código que você deseja executar quando uma dessas propriedades forem alteradas (isso, porque só estamos interessados em sermos notificados nas mudanças).

Quando alteramos uma das propriedades de props, a função passada como terceiro parâmetro é executada, no caso, referenciamos dentro do método create como acao. Até ai tudo bem, meu aluno candidato cangaceiro em JavaScript?

Então.. veja que no miolo do código há return acao(target). Isso indica que, para a função com a lógica que você passou, ela receberá como parâmetro o target (objeto alvo do proxy....target aqui é a mesma coisa que objeto passado como primeiro parâmetro, mas um atalho dentro do proxy). Ai vem o mistério resolvido, o tal model do código é esse target que foi passado para sua função de callback para executar sua lógica. No caso, sua lógica é passar o objeto que foi alterado (model) para a view que fará o upgrade.

Assim que avançar, verá que você fará um mecanismo de data binding assim como outros frameworks fazem, tudo com JavaScript puro.

Ficou mais claro agora?

Ah, o nome model poderia ser qualquer outro, por exemplo:

this._mensagem = ProxyFactory.create(
            new Mensagem(),
            ['texto'],
            calopsita=>this._mensagemView.update(calopsita)
        )

É o mesma coisa no JavaScript basicão, você passa um callback e nesse callback recebe o retorno da operação e aqui pode dar qualquer nome.

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