2017-02-16 21 views
1

фона:jQuery DataTables: Как я могу явно указать имя/таблицу экземпляра таблицы для использования с сохранением состояния?

Я использую DataTables в сочетании с библиотекой JS под названием «Turbolinks», который в основном превращает ваше приложение на одной странице заявки (SPA) без всех накладных расходов, с помощью истинного на стороне клиента фреймворк. Это чрезвычайно полезно для производительности приложений Ruby on Rails.

Есть пара головных болей, которые он представляет, хотя одно - совместимость с DataTables. У меня это работает очень хорошо, в основном уничтожая любой DataTable на навигационной панели Turbolinks, а затем снова инициализируя его на загрузке страницы turbolinks. Этот метод работает хорошо и, кажется, является универсальным принятым ответом на лучшую практику получения DataTables для работы с Turbolinks.

Вопрос:

На последних функций/штрихи Я пытаюсь добавить некоторые из моих приложений DataTable сохранение состояния. Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда таблица разрушается/повторно инициализируется при навигации по страницам, ... Я на самом деле не совсем уверен, как это назвать, но похоже, что вы проверяете объект настроек на stateSaveCallback - это выглядит как сво sInstance и/или sTableId:

DataTables_Table_0 

Затем ключ LocalStorage получает значение как:

DataTables_DataTables_Table_0_/current_path: "{data: data}" 

где current_path является то, что путь/страница вы на.

Затем, когда он возвращается в исходное состояние после возвращения на страницу, он устанавливается как DataTables_Table_1 и т. Д. И т. Д. - поэтому состояние никогда не будет правильно загружено.

Есть ли способ переопределить этот идентификатор (или каким-либо образом установить его имя в stateSaveCallback/stateLoadCallback), чтобы он не увеличивал последние «0», «1» и т. Д. В конце Это? Таким образом, когда таблица будет повторно инициализирована, она вытащит сохраненное состояние только с DataTables_Table/current_path?

ответ

1

Ответ заключается в том, чтобы просто дать таблице ID! Затем DataTables не присваивает ему свой собственный идентификатор с добавочным номером, и опция saveState работает только.

Кроме того, destroy/re-init фактически заставляет сервер дважды ударяться в случае таблицы AJAX.

Лучший способ сделать это - отключить кеш turbolinks для любых индексных страниц с использованием данных datatables. Если нет, вы в конечном итоге выполняете два запроса на сервер, если требуется только один.