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

Problema de data na instância de Negociação.

Pessoal boa tarde,

Criei um método no controller para a o tratamento da data e para criação de instâncias de Negociação, segue abaixo.

    instaciaNegociacao() {
        let data = new Date(...this._inputData.value
            .split("-")
            .map((item, index) => item - index % 2));

        console.log(data);

        let negocia = new Negociacao(
            data,
            this._inputQuantidade.value,
            this._inputValor.value
            );

        console.log(negocia.data);

        return negocia;
    }

Ao testar o código percebi que o "console.log(data)" retorna a data inserida no input #data. Ex:

Thu Nov 10 2016 00:00:00 GMT-0300 (Hora oficial do Brasil)

Enquanto o "console.log(negocia.data)" retorna a data atual, como se o parâmetro data não recebesse valor algum. Ex:

Tue Mar 07 2017 16:50:09 GMT-0300 (Hora oficial do Brasil)

Tentai identificar possíveis causas, mas, sem sucesso. Alguém poderia me ajudar?

9 respostas

Olá meu aluno! Compartilhe o código da sua classe Negociacao.

Só vou te pedir uma coisa. Dar uma checada nos nomes da variáveis. Não há nada errado usar negocia, mas se o cliente fala durante as reuniões negociacao é ideal usar a variável completa. Aliás, essa dica é uma que vai lhe ajudar tremendamente em sistemas mais complexos. Se a linguagem do seu cliente esta materializada no seu código, quando você for conversar com ele, não precisa fazer um "de para" do que esta escrito no seu código para a linguagem dele. Ajuda muito.

Aguardo o código da sua classe Negociacao.

Oi Talyson! Quando puder, não esqueça de colar o código que pedi para eu ver o que esta acontecendo com seu código.

Oi Talyson! Olha, não esqueci de você não. Só preciso do seu feedback e de preferência seu código para que eu possa olhar. Caso já tenha resolvido o problema, avisa seu instrutor aqui para ele dormir tranquilo :)

Flavio boa tarde, desculpe a longa ausência, só pude retomar o curso agora. Segue abaixo o código do controller.

class NegociacaoController {

    constructor() {
        let $ = document.querySelector.bind(document);

        this._inputData = $("#data");
        this._inputQuantidade = $("#quantidade");
        this._inputValor = $("#valor");
    }

    adiciona(event) {
        event.preventDefault();

        let negotiation = this.instaciaNegociacao();
        this.afterSubmitForm();
    }

    afterSubmitForm() {
        this._inputData.focus();
        this._inputData.value = "";
        this._inputValor.value = "0.0";
        this._inputQuantidade.value = "1";
        this._inputData.focus();
    }

    instaciaNegociacao() {
        let data = new Date(...this._inputData.value
            .split("-")
            .map((item, index) => item - index % 2));

        console.log(data);

        //Alterado para negociação conforme sugerido.
        let negocia = new Negociacao(
            data,
            this._inputQuantidade.value,
            this._inputValor.value
            );

        console.log(negocia.data);

        return negocia;
    }

}

Olá meu aluno! Eu preciso olhar a classe Negociacao. :)

Ops, me desculpe segue a classe Negociacao.

class Negociacao {

    constructor(data, quantidade, valor) {
        this._data = new Date();
        this._quantidade = quantidade;
        this._valor = valor;

        Object.freeze(this);
    }

    get data() {
        return new Date(this._data.getTime());
    }

    get quantidade() {
        return this._quantidade;
    }

    get valor() {
        return this._valor;
    }

    calculoVolume() {
        return this._quantidade * this._valor;
    }
}

function somaDoisNumeros(num1, num2) {
    return num1 + num2;
}

Como não nos comunicamos faz tempo, o ideal é você compartilhar tudo novamente para eu ter certeza de estar lendo o código mais atual.

O erro esta aqui

 constructor(data, quantidade, valor) {
        this._data = new Date();
        this._quantidade = quantidade;
        this._valor = valor;

        Object.freeze(this);
    }

Olha só o data! Você não esta usando o do parâmetro e nem criando uma nova a partir dele.

solução!

Uma correção para ficar igual o da aula é a seguinte:

constructor(data, quantidade, valor) {
        this._data = new Date(data.getTime());
        this._quantidade = quantidade;
        this._valor = valor;

        Object.freeze(this);
    }

Sucesso e bom estudo, meu aluno!