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

Só uma dúvida sobre o constructor

Olá

não entendi porque o objeto não é instanciado de maneira adequada quando coloco o valor dos inputs diretamente nas propriedades da classe, como no código abaixo:

class NegociacaoController{
    constructor(){
        let $ = document.querySelector.bind(document);
        this._inputData = $('#data').value;
        this._inputQuantidade = $('#quantidade').value;
        this._inputValor = $('#valor').value;
        Object.freeze(this);
    }
    adicionar(event){

        event.preventDefault();
        let data = new Date(this._inputData
            .split('/')
            .reverse()
            .join('/'));
        let negociacao = new Negociacao(data, this._inputQuantidade, this._inputValor);
        console.log(negociacao);
    }
}

esse código deveria funcionar também, não?

código do instrutor (esse funciona) :

class NegociacaoController{
    constructor(){
        let $ = document.querySelector.bind(document);
        this._inputData = $('#data');
        this._inputQuantidade = $('#quantidade');
        this._inputValor = $('#valor');
        Object.freeze(this);
    }
    adicionar(event){

        event.preventDefault();
        let data = new Date(this._inputData.value
            .split('/')
            .reverse()
            .join('/'));
        let negociacao = new Negociacao(data, this._inputQuantidade.value, this._inputValor.value);
        console.log(negociacao);
    }
}

Obrigado!

3 respostas
solução!

Boa tarde Sérgio!

Seu código não deveria funcionar mesmo não, porque você esta na inicialização do controller guardando os valores dos inputs e não uma referência para o elemento do formulário. Dessa maneira, quando você clicar no botão para criar uma nova negociação, ele nunca mais será capaz de buscar os valores atualizados do input, porque você não guarda uma referência para eles, mas os valores que eles tinham assim que seu controller é instanciado.

Outro ponto é que as propriedades inputData, inputValor e inputQuantidade começam com o prefixo input para deixar claro que não são os valores do formulário, mas as caixas de entrada.

Sergio, ao que me parece, você tentou escrever seu código dessa forma para tentar escreve menos, o que é excelente e uma qualidade boa em um desenvolvedor. Mas neste caso, não poderá seguir o caminho que escolheu por causa das questões que levantei anteriormente.

Sucesso e bom estudo!

Excelente! Muito Obrigado pelas respostas! A ficha caiu aqui. É porque tinha me esquecido que instanciei o controller no próprio html, o que faz com que a instância receba os valores dos inputs no momento em que o browser está interpretando o HTML. E nesse momento o usuário não "inputou"nenhum valor ainda.

Obrigado pela explicação e parabéns pelas vídeo aulas!