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

Aula 3 - Padrão de Projeto Factory

Ao acompanhar a aula 3 do curso javascript avançado. Percebi que o código do vídeo tá diferente do que está na aula transcrita. E sem falar que o código gera está gerando o seguinte erro ao adicionar uma negociação: NegociacaoController.js:31 Uncaught TypeError: Cannot read property 'adiciona' of undefined at NegociacaoController.adiciona (NegociacaoController.js:31) at HTMLFormElement.onsubmit (index.html:16)

Segue abaixo os trechos do código: E o trecho que instancia o ProxyFactory

this._listaNegociacoes = ProxyFactory.create(
        new ListaNegociacoes(),
        ['adiciona', 'esvazia'], model =>
            this._negociacoesView.update(model));        

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

A classe ProxyFactory

class ProxyFactory{
    static create(objeto, props, acao){
        new Proxy(objeto, {

            get(target, prop, receiver) {

                if(props.includes(prop) && typeof(target[prop]) == typeof(Function)) {
                    return function() {

                        console.log(`a propriedade "${prop}" foi interceptada`);
                        Reflect.apply(target[prop], target, arguments);
                        return acao(target);
                    }
                }
                return Reflect.get(target, prop, receiver);       
            }
        });
    }
}

O método adiciona

  adiciona(event) {
          event.preventDefault();

          //console.log(this._inputData.value);
          this._listaNegociacoes.adiciona(this._criaNegociacao());
        //  this._negociacoesView.update(this._listaNegociacoes);

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

          //this._listaNegociacoes.negociacoes.length = 0;
          //this._listaNegociacoes.negociacoes.push(this._criaNegociacao());
          console.log(this._listaNegociacoes.negociacoes);

    }
4 respostas

Fala ai Leonides, tudo bem? Nesse caso os seus códigos estão com erro ou você está compartilhando os códigos corretos que estão diferentes na transcrição? Desculpa mas eu não entendi.

Fico no aguardo.

Oi Matheus, no caso os códigos que mostrei estão com erro, onde não consigo identificar o problema do erro. Sobre o código diferentes na transcrição só foi um alerta sobre o código.

solução!

Consegui localizar o erro. Para título de curiosidade, na classe ProxyFactory não coloquei o return.

erro:

static create(objeto, props, acao){
        new Proxy ...

correto:

static create(objeto, props, acao){
        return new Proxy ...

Boa Leonides, fico feliz que tenha resolvido seus problemas.

Sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.