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

Tentei implementar o que aprendi e nao consegui

Tentei implementar o que aprendi no curso fazendo esse projeto de calculo de imc, mas quando submeto o form, a view nao atualiza com os dados submetidos do form, e tambem o calculo do imc nao aparece. Nao estou recebendo nenhum erro no console. Alguem pode me ajudar por favor? abaixo esta o link dos arquivos no google drive. Obrigada

https://drive.google.com/drive/folders/1m5v1NOnWt98VmxdVTNBQUhIY123kM-FP?usp=sharing

9 respostas
solução!

Fala ai Lara, tudo bem? Dei uma olhada no projeto, vamos aos pontos de correções:

  1. No onsubmit do form você está informando a classe do controller e não a nova instância dele:
<form  onsubmit="InformacoesController.adciona(event)">

Repare que o I de Informacoes está maiusculo, mas, a instância está:

let informacoesController = new InformacoesController();

Ou seja, o correto seria;

<form  onsubmit="informacoesController.adciona(event)">
  1. Sua classe Informacao inicializa varios atributos no construtor:
constructor(nome,peso,altura,gordura,imc){
        this.nome = nome;
        this.peso = peso;
        this.altura = altura;
        this.gordura = gordura;
    }

Mas, eles apenas possuem get, você poderia criar o set para eles ou apenas apagar os get. Por simplicidade eu apaguei os get e a classe ficou:

class Informacao {

    constructor(nome,peso,altura,gordura,imc){
        this.nome = nome;
        this.peso = peso;
        this.altura = altura;
        this.gordura = gordura;
    }

    get imc(){
        return this.peso / (this.altura*this.altura)
    }
}
  1. No controller faltou atualizar a view após adicionar uma nova informação no array:
adciona(event){
        event.preventDefault();
        this.listaInformacoes.adciona(this.criaInformacao());
        this.informacoesView.update(this.listaInformacoes) // adiciona essa linha
        this.limpaFormulario();
    }

Acho que é isso (se eu não esqueci de nada).

Espero ter ajudado.

Olà Matheus! Deu certo, muito obrigada! So nao entendi uma coisa, por que nao precisa dos métodos get nesse caso?

Fala Lara, que bom.

Nesse caso por padrão os atributos de classe do JS já vem com implementações próprios de get e set.

Como você sobrescreveu o get também precisaria criar o set porque o JS deixou de usar as padrões.

Abraços e bons estudos.

Entendi Matheus. Eu sei que pra deixar esse imc arredondado seria imc.toFixed(1) . Mas como fazer isso dar certo no método get imc ?

Fala Lara, nesse caso você pode passar o resultado da conta para ela, algo assim:

get imc(){
        return (this.peso / (this.altura*this.altura)).toFixed(1)
    }

Espero ter ajudado.

Oi Matheus. eu fiz do jeito que vc falou mas nao deu certo. O imc agora retorna 0.0

Fala ai Lara, tente dar uma olhada nos valores de peso e altura, porque o código em si não tem problemas.

Faça direto no console para você testar:

(51/(1.52*1.52)).toFixed(1) // 22.1

Adicione uns logs no get:

get imc() {
    console.log(this.peso)
    console.log(this.altura)
    return (this.peso / (this.altura * this.altura)).toFixed(1)
}

Abraços

Oi Matheus!

Consegui arrumar. Muita obrigada por toda ajuda que vc me deu e pela paciência em ensinar. vc é 10! Muito obrigada mesmo!

Magina Lara, sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.