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

Scroll Infinito da melhor maneira com esse padrão do projeto

A ideia seria criar um "Scroll Infinito" utilizando o "addEventListener(scroll)" porém não sei qual melhor maneira de chamar e executar ele, como não tem nenhum nenhum "botão" executando ação, fiquei um pouco confuso em qual seria a melhor maneira de fazer isso, segue o código de exemplo

class NegociacaoController {

    constructor() {
        this._listaNegociacoes = new Bind(new ListaNegociacoes());
    }

    importaNegociacoes() {
        console.log("ação executada por um botão")
    }

    scroll() {
        window.onscroll = function (ev) {
            console.log("executar");            
        }
    }
}
4 respostas

Oi Thiago, você diz scroll infinito com a ideia de que o scroll acompanhe o crescimento da tabela? Tipo, pra rolar a página sozinho?

a ideia seria toda vez que usuário chegar no final da página, mandar novamente carregar as informações, segue um exemplo pra ficar mais fácil de entender.

https://codepen.io/timothyli/pen/JXVMZY

Desde já obrigado.

Oi Tiago, tudo bem? Desculpa a demora, estou um pouco emperrado com algumas coisas, mas vou fazer o seguinte, vou checar seu caso nesse fim de semana e te dar uma resposta tá bem?

Desculpa mesmo, mas vamos resolver o seu problema.

solução!

Oi Tiago, tudo bem? Desculpa a demora mais uma vez. Bom, vi seu exemplo e tenho algumas considerações.

A ideia é que esse código não fique no controller. Isso por que quem deve saber em que parte da página o usuário está é a view. A view adicionar um EventListener no scroll e vai verificando se o usuário chegou no limite desejado. Esse limite é calcular no exemplo de código que você compartilhou:

document.addEventListener('scroll', function() {
        distToBottom = getDistFromBottom();
    ...
}

Bom, ai depois você precisa executar a ação de carregamento das negociações no controller. A ação vai apenas fazer a consulta por negociações e retornar isso para a view. Isso por que a view precisa construir os elementos DOM dinamicamente e inserir na página.

Como no projeto, se usa o padrão proxy para saber quando o modelo mudou, tudo que precisamos fazer é atualizar o modelo. Quando o modelo da lista de negociações mudar, a view atualiza sozinha.

Neste ponto, pode ser que precisemos mudar algo na estrutura do projeto pra adaptar.

Depois o processo se repete.

O que é que te impede de fazer esse processo nesse ponto: até onde lembro, não temos consulta por paginação no projeto. Essa é outra questão que se precisa implementar, mas é no servidor.