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

fiz no modelo MVC já implementado antes

fiz um adaptação do modelo usado o projeto principal para esse questão queria saber o que pode-se melhorado

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Funcionários</title>

    <link rel="stylesheet" href="index.css">
</head>
<body>

    <form class="form">
        <label for="nome">Nome <input type="text" name="nome" id="nome"> </label>
        <label for="endereco">Endereço <input type="text" name="endereco" id="endereco"> </label>
        <label for="salario">Salário <input type="number" name="salario" id="salario"> </label>
        <input type="submit" value="Cadastrar funcionário">
    </form>

    <div class="tabela"></div>

    <script src="/att1/Funcionarios.js"></script>
    <script src="/att1/FuncionariosController.js"></script>
    <script src="/att1/ListaFuncionarios.js"></script>
    <script src="/att1/FuncionariosViews.js"></script>

    <script>
        let funcionario = new FuncionarioController();

        document.querySelector('.form').addEventListener('submit', evento => funcionario.adiciona(evento))
    </script>
</body>
</html>
class Funcionarios {
    #nome;
    #endereco;
    #salario;

    constructor(nome, endereco, salario){
        this.#nome = nome;
        this.#endereco = endereco;
        this.#salario = salario;
    }

    get nome(){return this.#nome};

    get endereco(){return this.#endereco}

    get salario(){return this.#salario}
}
class FuncionarioController {
    #inputNome;
    #inputEndereco;
    #inputSalario;
    #form;
    #listaFuncionario;
    #funcionariosViews;

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

        this.#form = $('.form');
        this.#inputNome = $('#nome');
        this.#inputEndereco = $('#endereco');
        this.#inputSalario = $('#salario');
        this.#listaFuncionario = new ListaFuncionario();
        this.#funcionariosViews = new FuncionarioViews($('.tabela'))

        this.#funcionariosViews.update(this.#listaFuncionario)
    }

    adiciona(evento) {
        evento.preventDefault();

        this.#listaFuncionario.adiciona(this.#criarFuncionario());
        this.#funcionariosViews.update(this.#listaFuncionario)

        console.log(this.#listaFuncionario.funcionarios.map(p => p.nome))
        console.log(this.#criarFuncionario().nome)

        this.#limpaCampo();
    }

    #criarFuncionario() {
        return new Funcionarios(this.#inputNome.value, this.#inputEndereco.value, this.#inputSalario.value);
    }

    #limpaCampo() {
        this.#form.reset();
        this.#inputNome.focus();
    }

}
class ListaFuncionario{
    #listaFuncionarios

    constructor(){
        this.#listaFuncionarios = [
            {
                "nome": "Douglas",
                "endereco" : "Rua da esquina, 123",
                "salario" : "4500"
            },
            {
                "nome": "Felipe",
                "endereco" : "Rua da virada, 456",
                "salario" : "5000"
            },
            {
                "nome": "Silvio",
                "endereco" : "Rua da aresta, 789",
                "salario" : "6000"
            }
        ];
    }

    #adiciona(funcionario){
        this.#listaFuncionarios.push(funcionario);
    }

    adiciona(funcionario){
        return this.#adiciona(funcionario);
    }

    #funcionarios(){
        return this.#listaFuncionarios;
    }

    get funcionarios(){
        return this.#funcionarios()
    }   
}
class FuncionarioViews{
    #elemento;

    constructor(elemento){
        this.#elemento = elemento
    }

    #template(model){ return `
        <table>
            <thead>
                <tr>
                    <th>Nome</th>
                    <th>Endereço</th>
                    <th>Salário</th>
                </tr>
            </thead>

            <tbody>
                ${this.#novoFuncionario(model.funcionarios)}
            <tbody>
        </table>
    `}

    #update(model){
        this.#elemento.innerHTML = this.#template(model)
    }

    update(model){
        return this.#update(model)
    }

    #novoFuncionario(array){
        return array.map(f=>`
            <tr>
                <td>${f.nome}</td>
                <td>${f.endereco}</td>
                <td>R$ ${f.salario}</td>

            </tr>
        `).join(" ")
    }
}
table,tr,td{
    border: 1px solid black;
}

thead{
    background-color: aqua;
    text-align: justify;
}

está um pouco misturado para economizar linhas kkk

2 respostas

Como tenho como base só o projeto atual no Model MVC por isso não vou me distanciar da forma que já foi mostrada, em poucas palavras vou copia e adaptar em outros projetos, não sei se isso é o certo a se fazer ou é a ideia principal do curso

solução!

Oi Wesley, tudo bem?

Desculpa a demora em retornar.

Seu projeto está super legal! A ideia do curso é exatamente essa, te ajudar a entender os conceitos para você adaptar aos seus próprios projetos.

Muito obrigada por compartilhar o seu código com a gente.

Um abraço e bons estudos.