"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Veja como implemento a paginação baseada em cursor no jQuery Datatable.

Veja como implemento a paginação baseada em cursor no jQuery Datatable.

Publicado em 2024-11-05
Navegar:422

Here

Ao trabalhar com grandes conjuntos de dados em aplicativos da web, a paginação é crucial para o desempenho e a experiência do usuário. A paginação padrão baseada em deslocamento, comumente usada com tabelas de dados, pode ser ineficiente para grandes conjuntos de dados.

A paginação baseada em cursor oferece uma alternativa de melhor desempenho, especialmente ao lidar com atualizações em tempo real ou grandes cargas de dados. Neste artigo, explicarei como implementar a paginação baseada em cursor em um jQuery DataTable.

Etapas para implementar paginação baseada em cursor em jQuery DataTable

1.Configurando o ambiente
Antes de mergulhar na lógica de paginação, certifique-se de ter o seguinte:

eu. jQuery
ii. Plug-in DataTables
iii. API de back-end (ou banco de dados) que suporta paginação baseada em cursor

2.Configurando a API de back-end
A paginação baseada em cursor depende muito do back-end para retornar os dados necessários. Vamos supor que estamos trabalhando com uma API REST que retorna uma resposta JSON, incluindo:

Dados: uma matriz de registros
Cursor: um identificador exclusivo, como id ou carimbo de data/hora, indicando a posição atual no conjunto de dados.

Aqui está um exemplo de resposta paginada do servidor:

{
  "data": [
    {"id": 101, "name": "John Doe", "email": "[email protected]"},
    {"id": 102, "name": "Jane Smith", "email": "[email protected]"}
  ],
  "pagination": {
     "next_cursor": "eyJpZCI6MTgsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0",
        "prev_cursor": "eyJpZCI6MTAsIl9wb2ludHNUb05leHRJdGVtcyI6ZmFsc2V9"
   }
}

3.jQuery Inicialização de DataTable
O DataTable é inicializado usando jQuery e vinculado à API backend. Aqui está uma estrutura básica:

var ajaxurl = "your-ajax-url";

var oTable = jQuery("#product_list_tbl").DataTable({
  preDrawCallback: function (settings) {
    var dt = jQuery("#product_list_tbl").DataTable();
    var settings = dt.settings();
    if (settings[0].jqXHR) {
      settings[0].jqXHR.abort();
    }
  },
  pagingType: 'simple',
  pageLength: 9,
  serverMethod: "post",
  ajax: {
    url: ajaxurl   "?action=search_ids",
    data: function (d) {
      d.search_id = jQuery("#search_id").val();
      // other params
    }
  },
});

4.Personalizar controles de paginação

var ajaxurl = "your-ajax-url";

var oTable = jQuery("#product_list_tbl").DataTable({
  preDrawCallback: function (settings) {
    var dt = jQuery("#product_list_tbl").DataTable();
    var settings = dt.settings();
    if (settings[0].jqXHR) {
      settings[0].jqXHR.abort();
    }
  },
  pagingType: 'simple',
  pageLength: 9,
  serverMethod: "post",
  ajax: {
    url: ajaxurl   "?action=search_ids",
    data: function (d) {
      d.cursor = jQuery("#product_list_tbl").data('current-cursor') || '';
      d.search_id = jQuery("#search_id").val();
      // other params
    }
  },
  drawCallback: function (json) {

    const pagination = json.json.pagination;

    if (pagination.next_cursor) {
      jQuery(document).find('.paginate_button.next').removeClass('disabled');
      jQuery(document).find('.paginate_button.next').attr('data-cursor', json.json.pagination.next_cursor ?? '' );
    } else {
      jQuery(document).find('.paginate_button.next').addClass('disabled');
    }

    if (pagination.prev_cursor) {
      jQuery(document).find('.paginate_button.previous').removeClass('disabled');
      jQuery(document).find('.paginate_button.previous').attr('data-cursor', json.json.pagination.prev_cursor ?? '' );
    } else {
      jQuery(document).find('.paginate_button.previous').addClass('disabled');
    }

  },
});

 // Custom click handlers for pagination buttons
  jQuery(document).on('click', '#product_list_tbl_paginate .paginate_button', function(e) {
    e.preventDefault();
    e.stopPropagation(); // Prevent event from bubbling up

    // Only proceed if this is actually a 'next' or 'previous' button
    if (!jQuery(this).hasClass('next') && !jQuery(this).hasClass('previous')) {
      return;
    }

    var cursor = jQuery(this).attr('data-cursor');

    // Set the cursor directly on the table element
    jQuery("#product_list_tbl").data('current-cursor', cursor);

    // Reload the table with the new cursor
    oTable.ajax.reload();
  });

  // Disable default DataTables click handlers for pagination
  jQuery(document).off('click.DT', '#product_list_tbl_paginate .paginate_button');

5.Manipulação de API e sincronização de front-end
Cada vez que um usuário clica no botão Próximo ou Anterior, o cursor é atualizado e enviado ao backend. O backend busca os registros do banco de dados, começando na posição atual do cursor, e retorna o conjunto de dados apropriado para o DataTable.

Aqui está a essência: Clique aqui

Conclusão
A paginação baseada em cursor é uma abordagem prática e eficiente ao trabalhar com grandes conjuntos de dados ou aplicativos em tempo real. Ao implementar a paginação baseada em cursor no jQuery DataTable, você aprimora o desempenho, melhora a experiência do usuário e garante o manuseio preciso dos dados. Essa técnica é particularmente útil para aplicações modernas que exigem gerenciamento de dados rápido, escalonável e confiável.

Espero que este guia ajude você a implementar a paginação baseada em cursor em seus próprios projetos. Boa codificação!

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/connectaryal/heres-how-i-implement-cursor-based-pagination-in-jquery-datatable-hoo?1 Se houver alguma violação, entre em contato com study_golang@163 .com para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3