Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dǘvida na inserção da negociação pelo map()

Ola amigos!

Minha dúvida basea-se, ao inserir a negociação no DOM pelo método map(). Quando passado como parametro uma lista com apenas uma negociação (index 0), o map() percorre minha lista de negociações e insere no DOM sem nenhuma restrição, mas a partir da segunda negociação, como estou passando um array, eu imaginei que fosse inserir a negociação do index 0 e em seguida do index 1, e assim por diante.

Imaginei que ficasse mais ou menos assim:

negociação 1
negociação 1
negociação 2
negociação 1
negociação 1
negociação 2
negociação 3

O meu código esta funcionando igualmente ao do professor, mas gostaria de entender esse comportamento.

Segue minha classe NegociacaoView

class NegociacoesView {
    constructor(elemento) {
        console.log('Chamei NegociacoesView');
        // qual elemento do DOM ira receber o template, 
        // no caso a div negociacoesView, a intancia foi feita no controller
        this._elemento = elemento; 
    }

    _template(negociacoes) {

        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>
            ${
                negociacoes.map(n => {
                    console.log(n);
                    return `
                    <tr>
                        <td>${DateHelper.dataParaTexto(n.data)}</td>
                        <td>${n.quantidade}</td>
                        <td>${n.valor}</td>
                        <td>${n.volume}</td>
                    </tr>`
                }).join('') 
                // usamos o join() porque é importante para que no HTML,
                // não tenha vírgulas aleatórias, e quando passamos o parametro
                // '' vazio, estamos substituindo a "," virgula por uma string vazia.
            }
        </tbody>

        <tfoot>
        </tfoot>
    </table>`
    }

    update(modelListaNegocicoes) {
        this._elemento.innerHTML = this._template(modelListaNegocicoes.negociacoes);
    }
}
1 resposta
solução!

Oi Helderson!

O .map() percorre elemento por elemento executando a função que é passada como parâmetro no elemento atual.

Vou te dar um exemplo de como o map funciona, se tiver mais alguma dúvida pode comentar aqui.

Vamos lá. Considere o seguinte array var pares = [2,4,6]. Quando executamos o código

pares.map((p, i) => {
    console.log("elemento atual:", p);
    console.log("indice atual:", indice);}
);

Temos os seguintes prints

// elemento atual: 2
// indice atual: 0

// elemento atual: 4
// indice atual: 1

// elemento atual: 6
// indice atual: 2

Ou seja, apesar do .map() ser chamado por um array, a função executada é em cima do elemento atual.

Deixo aqui a referência da MDN sobre o map().

Espero ter ajudado!