jatery Datatables - как добиться выборки на стороне сервера и сортировки на стороне клиента - PullRequest
10 голосов
/ 07 июня 2011

Я использую плагин datatables для обработки наших таблиц.У нас есть этот случай использования, когда нам нужно извлечь данные (разбитые на страницы) через ajax-вызов, используя bServerSide и sAjaxSource, но мы хотели бы просто отсортировать данные на этой странице, а не извлекать отсортированные данные с сервера, как в нашем случае это чтениебыло бы очень дорого.

Возможно ли это сделать?Если да, пожалуйста, предложите, как действовать.Заранее спасибо!!

Ответы [ 2 ]

4 голосов
/ 07 июня 2011

У меня работает что-то почти идентичное, и решение было полностью конвейерным - ничего более волшебного и не нужно объединять другие решения. Установите высокий уровень громкости конвейера - в моем случае я собираю по существу 5 «групп» результатов (страницы * отображают результаты) как вперед, так и назад - и верю, что Datatables сделает все остальное.

В одном случае моего приложения я имею дело с более чем 5 миллионами записей. Да, это много. Я провел тонну тестирования различных элементов системы, включая запросы, оптимизацию базы данных, индексацию и использование шаблонов пользовательского интерфейса. Все указывают на то, что эта система наиболее эффективна для данной ситуации. В вашем случае я бы настоятельно рекомендовал провести мониторинг производительности независимо от вашего решения в отношении пользовательского интерфейса, чтобы увидеть, какие существуют (если имеются) узкие места. В моей системе записи более 5 миллионов я наблюдаю около 2-4 секунд времени запроса и + -5% загрузки на страницу или сортировку, что, безусловно, поддается управлению. У меня есть сотни пользователей и довольно много других процессов, с которыми приходится работать одновременно, и мы не видим заметных задержек с момента внедрения нескольких DataTables около 6 месяцев назад.

С точки зрения пользовательского интерфейса, слабость сортировки только данных на экране заключается в том, что они не интуитивно понятны. Когда у меня есть доступ к тысячам или миллионам записей в сетке, и я сортирую или фильтрую их, я ожидаю увидеть сортировку и фильтр всех доступных записей. Это звучит глупо, но помните, что наука о дизайне пользовательского интерфейса - это создание шаблонов, которые «знакомы» пользователю.

4 голосов
/ 07 июня 2011

Я прочитал это обсуждение, которое может вам помочь: в основном вы должны инициализировать таблицу de с этими параметрами;

"bServerSide" : false,
"sAjaxSource" : "path to your ajax source"

Таким образом, данные загружаются только один раз, и вся фильтрация выполняетсяклиент.

Чем, если вы хотите загрузить больше данных, вы можете использовать fnReloadAjax .Вы можете прочитать эту дискуссию по теме, я думаю, что она содержит все ответы на ваши вопросы.

РЕДАКТИРОВАТЬ - С конвейером вы можете избежать частых звонков на сервер только для нумерации страниц (если выфильтровать данные, звонок на сервер).Если вы хотите получить данные на сервер только один раз, а затем отфильтровать данные на стороне клиента, вы должны отключить обработку на стороне сервера (выделите белыми указанные выше параметры).Если вы отключите обработку на стороне сервера, вы можете предоставить пользователю способ получения дополнительных данных с сервера с помощью «fnReloadAjax» (например, кнопки).

То, что я до сих пор не получаю, вам нужно получить какие-то другие данные с сервера или то, что пользователь получает первым, в порядке?

РЕДАКТИРОВАТЬ 2 - если вы не хотите 't для вызова сервера вы можете вообще избежать использования AJAX, улучшив существующую таблицу.Просто создайте сторону html-серверов следующим образом:

 <table width="770" border="0" id='rdr_home' class='tablesorter'>
        <thead>  
          <tr>
            <th>col1</th>
            <th>col2</th>
            <th>col3</th>
          </tr>
        </thead>
        <tbody>
    <?php 
    foreach ($rows as $row){
    //echo all rows here (be careful as for each row you must 
    //have as many <td> as the column: no colspan!
    }
    ?>
        </tbody>
    </table>

И затем создайте свою таблицу данных, например, вот такую:

oTable = $('.tablesorter').dataTable({
        "aaSorting": [[2, "asc"]],
        "bAutoWidth": false,
        "bFilter": false,
        "sDom": 'T<"clear">lfrtip',
        "aoColumns": [
                    { "sType": "html" },
                    { "sType": "html" },
                    null
                ],
        "oLanguage": {
            "sUrl": "templates/rhuk_milkyway/dataTables/media/language/it_IT.txt"
        }
    });

С этим у вас есть нумерация страниц и фильтрация на стороне сервера

РЕДАКТИРОВАТЬ 3 - в случае, если вы упомянули (datatables заботится о разбиении на страницы, но не требует фильтрации), вы должны добавить какой-то дополнительный плагин, я думаю.Вы должны отключить фильтры и сортировщики данных на этапе инициализации следующим образом:

    "bFilter": false,
    "bSort": false,

, а затем использовать другой компонент для сортировки фильтрации того, что на экране.Вы можете посмотреть здесь решение для сортировки и фильтрации: http://silverwareconsulting.com/index.cfm/2008/10/2/jquery-autofiltering-table

(лично мне не нравится идея фильтрации, нажав, но вы можете использовать это, если хотите использовать что-то ещена ваш вкус), ни в коем случае нельзя использовать встроенные фильтры таблиц данных, если разрешить разбиение на страницы на стороне сервера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...