2017-02-16 1 views
1

背景:jQuery DataTables:状態保存で使用するテーブルインスタンス名/テーブルIDを明示的に設定するにはどうすればよいですか?

私は基本的に真のクライアント側を使用して、すべてのオーバーヘッドなしに単一ページのアプリケーション(SPA)にあなたのアプリケーションをオン「Turbolinks」と呼ばれるJSライブラリと組み合わせてのDataTableを使用していますフレームワーク。これは、Ruby on Railsアプリケーションのパフォーマンスにとって非常に便利です。

DataTableとの互換性についてはいくつかの頭痛があります。基本的には、TurbolinksナビゲーションのDataTableをすべて破棄し、ターボリンクのページを再度読み込み直すことで、正常に動作します。この方法はうまくいき、TurbolinksでDataTableを動作させるためのベストプラクティスとして、全面的に受け入れられた答えと思われます。

質問:私は私のアプリケーションの一部に追加しようとしている最後の機能/最後の仕上げの上

は、DataTableの状態の保存です。私が直面している問題は、テーブルが破棄される/ページのナビゲーションで再初期化されるたびに、実際には何を呼び出すのかが実際にはわかりませんが、設定オブジェクトをstateSaveCallback - それはそのsInstanceおよび/またはsTableId次のようになります。

DataTables_Table_0 

その後のlocalStorageキーは以下のように設定されます:

CURRENT_PATHは、あなたがにしているものは何でもパス/ページです
DataTables_DataTables_Table_0_/current_path: "{data: data}" 

その後、ページに戻ったときに再初期化されると、DataTables_Table_1などに設定され、状態が正しくロードされません。

最後に '0'、 '1'などを増やさないように、そのIDを無効にする方法(またはstateSaveCallback/stateLoadCallbackの名前を設定する方法)はありますか?それ?こうすると、テーブルが再初期化されたときに、保存された状態がちょうどDataTables_Table/current_pathからプルされますか?

答えて

1

答えは、単にテーブルにIDを与えることです!その後、DataTablesはそれ自身のIDにインクリメントする番号を割り当てず、saveStateオプションが機能します。

また、AJAXテーブルの場合、destroy/re-initによって実際にサーバが2回ヒットすることがあります。

より良い方法は、データテーブルを持つインデックスページのturbolinksキャッシュを無効にすることです。そうでない場合は、1つだけが必要な場合に2つのリクエストをサーバーに送信します。

関連する問題