現在動作している単純なアプリケーションがありますが、ユーザーエクスペリエンスを向上させるために ajax を使用するように変換して、ユーザーがナビゲーションのリンクをクリックするたびにページ全体をリロードする必要がないようにしようとしています。ヘッダー内にナビゲーション バーを含む単純なヘッダー/ボディ/フッター アプローチを使用します。
そのため、現在、ナビゲーション項目のいずれかをクリックすると、Coffeescript を使用して行ったアクティブ状態の CSS ハイライトが正しく変更されます。
以下のコードでわかるように、ナビゲーションの 4 番目のリンクは "new_movie_path" にリンクしています。このページは Nokogiri を使用して Web サイト (IMDB.com など) をクロールし、現在の Box Office トップ 10 の映画を表示します。このモジュールは個別に問題なく動作しています。
私がやろうとしているのは、そのリンクをクリックしてもページが更新されず、代わりに ajax 呼び出しを使用してデータをフェッチし、現在のレイアウトの本文内に結果を表示するようにすることです。remote: true要素をリンクに追加しましたが、多くの試行錯誤の後、残りを把握できませんでした。おまけ: データの読み込み中にスピナーが表示されます。
私の既存のコードからのスニペット:
/app/views/layout/application.erb.html
<body>
<%= render 'shared/header' %>
<div class="container first-contain" id="body-content">
<%= yield %>
</div>
</body>
/app/views/shared/_header.html.erb
<ul class="nav">
<li class="active"><%= link_to "Home", "#" %></li>
<li><%= link_to "About", "#" %></li>
<li><%= link_to "Contact", "#" %></li>
<li><%= link_to "New Movies", new_movie_path, remote: true %></li>
</ul>
/app/assets/javascripts/navigation.js.coffee
$ ->
changeTab = (e) ->
e.preventDefault()
$("ul.nav li.active").removeClass "active"
$(@).addClass("active")
$("ul.nav li").click changeTab
この問題に関するヘルプは大歓迎です。