先日 Hugoのテーマ一覧を参照できるWebアプリを作成した のですが、この時に参考にしたサイトがあります。
Dribbble
言わずと知れた Dribbble です。 このサイト、画像をクリックするとmodalっぽく開く実装なのですが、リンクを別タブで開いても表示されます。
これをRailsアプリで実装したくなってきました。
やり方ざっくり
モーダルで表示する部分のデータをクライアント側(HTML or JS)に持たせても良いのですが、一覧ページの画像は結構な数があるので、このデータの取得をAjaxで都度取得する実装とすることにしました。
あと、UIはBootstrap使っているので、モーダルの操作はこちらのAPIを利用しています。
もう少し詳しく
- 空のモーダルを用意する(HTML)
以下、slimの例。ここは、まぁ公式ドキュメントを元に空のモーダルを1つ作っておくだけです。
|
|
- 一覧ページの画像に詳細ページのリンクをAjaxで追加(Rails)
link_toのオプションにremote: true
を設定しておきます。
- 詳細ページのviewは丸々partial化(Rails)
これは、モーダル表示でのAjaxのための実装です。次の工程で利用します。(ここがポイントかな)
- partial化したviewをjs.erbにて、モーダルの中身を差し替え、モーダルの表示を行います。(Rails)
|
|
この Modal
は、bootstrap.Modal
です。webpackerのエントリーファイルで
windowオブジェクトに突っ込んでいます。
|
|
残タスク
ここまでで、一応モーダルで表示するのと、別タブで表示するのは実装できました。
一見完了してそうなのですが、実はDribbbleではモーダル表示の際にURLを変更しています。 ここは、HTML5のHistory APIであるpushStateを利用しています。 いわゆるpjaxと呼ばれる実装ですね。 ここは実装してみて、少しハマったので、別記事で詳細記載したいと思います。