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

A mensagem não aparece! E o console não exibe erro...

A mensagem("Negociacao adicionada com sucesso") não aparece e não é dectado nem um erro pelo console

index.html

<!DOCTYPE html>
<html lang="pt-br">

<head>

    <meta charset="UTF-8">
    <title>Negociações</title>
    <link rel="stylesheet" href="css/bootstrap.css">
    <link rel="stylesheet" href="css/bootstrap-theme.css">

</head>

<body class="container">

    <h1 class="text-center">Negociações</h1>

    <div id="mensagemView"></div>

    <form class="form" onsubmit="negociacaoController.adiciona(event)">

        <div class="form-group">
            <label for="data">Data</label>
            <input type="date" id="data" class="form-control" required autofocus />
        </div>

        <div class="form-group">
            <label for="quantidade">Quantidade</label>
            <input type="number" min="1" step="1" id="quantidade" class="form-control" value="1" required />
        </div>

        <div class="form-group">
            <label for="valor">Valor</label>
            <input id="valor" type="number" class="form-control" min="0.01" step="0.01" value="0.0" required />
        </div>

        <button class="btn btn-primary" type="submit">Incluir</button>
    </form>

    <div class="text-center">
        <button class="btn btn-primary text-center" type="button">
            Importar Negociações
        </button>
        <button class="btn btn-primary text-center" type="button">
            Apagar
        </button>
    </div>

    <br>
    <br>

    <div id="negociacoesView">

    </div>

    <script src="js/app/models/Negociacao.js"></script>
    <script src="js/app/controllers/NegociacaoController.js"></script>
  <script src="js/app/helpers/DateHelper.js"></script>
    <script src="js/app/models/ListaNegociacoes.js"></script>
    <script src="js/app/views/NegociacoesView.js"></script>
    <script src="js/app/models/Mensagem.js"></script>
    <script src="js/app/views/MensagemView.js"></script>

    <script>
        let negociacaoController = new NegociacaoController();
    </script>

</body>

</html>

NegociacaoCrontroller.js

class NegociacaoController {

  constructor() {

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

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

        this._listaNegociacoes = new ListaNegociacoes();
        this._negociacoesView = new NegociacoesView($("#negociacoesView"));

        this._mensagem = new Mensagem();
        this._mensagemView = new MensagemView($("#mensagemView"));
        this._mensagemView.update(this._mensagem);
    }

    adiciona(event) {

    event.preventDefault();
    this._listaNegociacoes.adiciona(this._criaNegociacao());
    this._negociacoesView.update(this._listaNegociacoes);

    this._mensagem.texto = 'Negociacao adicionada com sucesso';
    this._mensagemView.update(this._mensagem);  

        this._limpaFormulario();

    }

  _criaNegociacao() {

    return new Negociacao(
          DateHelper.textoParaData(this._inputData.value),
            this._inputQuantidade.value,
            this._inputValor.value);

  }

  _limpaFormulario() {

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

  }

}

Mensagem.js

class Mensagem {

  constructor(texto="") {

    this._texto = texto;
  }

  get texto() {
    return this._texto;
  }

  set texto(texto) {
    this._texto = this._texto;
  }

}

MensagemView.js

class MensagemView {

  constructor(elemento) {
    this._elemento = elemento;
  }

  _template(model) {

    return `<p class="alert alert-info">${model._texto}</p>`;
  }

  update(model) {
    this._elemento.innerHTML = this._template(model);
  }
}
8 respostas

Oi Leonardo tudo bem?

Poderia disponibilizar também o js desses arquivos também por gentileza.

   <script src="js/app/controllers/NegociacaoController.js"></script>
  <script src="js/app/helpers/DateHelper.js"></script>
    <script src="js/app/models/ListaNegociacoes.js"></script>
    <script src="js/app/views/NegociacoesView.js"></script>

Negociação Controller

class NegociacaoController {

  constructor() {

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

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

        this._listaNegociacoes = new ListaNegociacoes();
        this._negociacoesView = new NegociacoesView($("#negociacoesView"));

        this._mensagem = new Mensagem();
        this._mensagemView = new MensagemView($("#mensagemView"));
        this._mensagemView.update(this._mensagem);
    }

    adiciona(event) {

    event.preventDefault();
    this._listaNegociacoes.adiciona(this._criaNegociacao());
    this._negociacoesView.update(this._listaNegociacoes);

    this._mensagem.texto = 'Negociacao adicionada com sucesso';
    this._mensagemView.update(this._mensagem);  

        this._limpaFormulario();

    }

  _criaNegociacao() {

    return new Negociacao(
          DateHelper.textoParaData(this._inputData.value),
            this._inputQuantidade.value,
            this._inputValor.value);

  }

  _limpaFormulario() {

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

  }

}

Date Helper

class DateHelper {

  constructor() {

    throw new Error("Esta classe(DateHelper) não pode ser instanciada");
  }

  static dataParaTexto(data) {

    /*return  data.getDate() 
    + "/" + (data.getMonth() + 1) 
    + "/" + data.getFullYear();
    */
    return `${data.getDate()}/${data.getMonth() + 1}/${data.getFullYear()}`;
  }

  static textoParaData(texto) {

    if (!/^\d{4}-\d{2}-\d{2}$/.test(texto)) {
      throw new Error("Deve estar no formato aaaa-mm-dd");
    } 
    return new Date(...texto.split('-').map((item, indice) => item - indice % 2));
  }
}

Lista Negociações

class ListaNegociacoes {

  constructor() {

    this._negociacoes = [];
  }

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

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

Negociações View

class NegociacoesView {

  constructor(elemento) {
    this._elemento = elemento;
  }

  _template(model) {

    return `
      <table class="table table-hover table-bordered">
        <thead>
          <tr>
            <th>DATA</th>
            <th>QUANTIDADE</th>
            <th>VALOR</th>
            <th>VOLUME</th>
          </tr>
        </thead>

        <tbody>
          ${model.negociacoes.map((n) => {

            return `
              <tr>
                  <td>${DateHelper.dataParaTexto(n.data)}</td>
                  <td>${n.quantidade}</td>
                  <td>${n.valor}</td>
                  <td>${n.volume}</td>
              </tr>
            `
          }).join("")}
        </tbody>

        <tfoot>
          <td colspan="3">Total</td>
          <td>
            ${
              model.negociacoes.reduce((total, n) => {
                return total + n.volume;
              }, 0.0)
            }
          </td>
        </tfoot>
      </table>

    `;
  }

  update(model) {

    this._elemento.innerHTML = this._template(model);
  }
}

Eu pedi os códigos para montar o cenário.

Eu vi que pedi a NegociacaoController.js que você já tinha mandado ao invés da Negociacao.js .

Eu coloquei a Negociacao.js do projeto e todo o seu código e funcionou.

https://codepen.io/anon/pen/xMKGKO

Duas coisas que podem estar acontecendo, o problema estar na Negocicao.js então eu precisaria ver.

Ou algum script não foi encontrado e isso vai aparecer na aba network das ferramentas de desenvolvedor do seu navegador.

NÃO sei explicar simplesmente não funciona!

aqui o Negociação.js

class Negociacao {

    constructor(data, quantidade, valor) {

        this._data = new Date(data.getTime());
        this._quantidade = quantidade;
        this._valor = valor;
        Object.freeze(this);
    }

    get volume() {
        return this._quantidade * this._valor;
    }

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

    get quantidade() {
        return this._quantidade;
    }

    get valor() {
        return this._valor;
    }

}

Oi!

Coloquei o Negociacao.js no https://codepen.io/anon/pen/qgWeZG

Poderia testar, por gentileza, se o site acima funciona para você.

E qual navegador e versão está usando?

solução!

Já resolvi, mas obrigado pelo seu tempo...

Imagina cara, to aqui para ajudar.

Se puder compartilhar a solução do problema ficaria muito grato. Assim no futuro alunos que passarem por problemas parecidos com o seu irão conseguir achar a solução.

Rapaz, passei muito tempo procurando pelo erro como realmente não achei, resolvi apagar o código escrito e fazer a aula do começo!

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