Подтвердить что ты не робот

DataTable() и DataTable() - почему существует разница и как мне заставить их работать вместе?

Подавляющее большинство документации для этого плагина указывает, что вы инициализируете его с помощью

$('#example').dataTable();

Однако http://www.datatables.net/examples/api/multi_filter_select.html инициализирует использование

$('#example').dataTable();

Результирующие объекты сильно различаются, и приведенный выше пример URL-адреса не работает, когда я инициализирую нижний регистр "D" , однако в значительной степени все остальное требует инициализации "D" нижнего регистра.

Может кто-нибудь объяснить мне, почему существует разница, и как заставить обоих играть хорошо вместе? По сути, мне нужна функция выбора нескольких фильтров, но также нужно использовать некоторые другие вызовы/плагины, которые, похоже, не похожи на инициализацию "D" в верхнем регистре.

4b9b3361

Ответ 1

В принципе, два конструктора возвращают разные объекты.


конструктор dataTable

var table = $(<selector>).dataTable()

dataTable - это oldschool dataTables constructur, который возвращает объект jQuery. Этот объект jQuery обогащен набором методов API в венгерском формате нотации, например fnFilter, fnDeleteRow и т.д. Полный список методов API здесь. Примеры:

table.fnDeleteRow(0); 
table.fnAddData(['E', 'F']);

dataTable поддерживается всеми версиями 1.9.x/ 1.10.x.


Конструктор DataTable

var table = $(<selector>).dataTable()

Конструктор DataTable был введен в 1.10.x и возвращает огромный объект API с полным доступом для чтения/записи к страницам, строкам, ячейкам и т.д., см. руководство. Пример эквивалентности:

table.row(0).remove();
table.row.add(['E', 'F']).draw();

Объединение dataTable и DataTable

Если вы сохраняете старый код или по какой-то причине должны использовать конструктор oldschool dataTable, но все равно нужно использовать новый API, объект jQuery расширяется (от 1.10.0) с помощью .api(), который возвращает новый API. Пример эквивалентности:

var table = $('#example').dataTable();
table.api().row(0).remove();
table.api().row.add(['E', 'F']).draw();

Старый API, как table.fnDeleteRow(0), все еще работает. Итак, к вашему беспокойству:

По сути, мне нужна функция выбора нескольких фильтров, но также нужно использовать некоторые другие вызовы/плагины, которые, похоже, не похожи инициализация "D" в верхнем регистре.

Как вы видите, вы можете сделать оба! Инициализировать dataTables старый путь и использовать .api(), когда вам нужен доступ к новому API.


Почему так много официальных примеров использует dataTable()?

Ну, вам не нужно использовать конструктор dataTable. Если вы не используете новый API, нет причин использовать конструктор dataTable. Конструктор oldschool dataTable не устарел. Таблицы данных в основном работают с одним человеком. Это огромная задача для поддержания и развития и, очевидно, очень много времени для поддержки огромного веб-сайта с форумами, руководствами, примерами и т.д. Это только предположение, но я предполагаю, что теперь Аллан Жардин изменил dataTable на dataTable там, где это действительно необходимо, просто потому, что он не может сделать все за один шаг.