0

Ruby on Rails アプリケーションを使用して、さまざまなトピックの好き嫌いを追跡しています。ユーザーが「いいね」を押すと、いいねの数が増加し、パーシャルをリロードする ajax 呼び出しを介してその数がすぐに表示されます。しかし、問題は、link_to がコントローラーの 1 つで関数を呼び出し、(respond_to で) ajax を実行するため、実際には履歴に何も保存されないため、アクセス時にリンクの色を変更できないことです。

これが私のcssです:

/* Links */
a:link {
  color: #06c;
  text-decoration: none;
}
a:visited {
  color: red !important;
  text-decoration: none;
}
a:hover{
  color:#D8CA92;
  text-decoration: none;
}
a:active {
  color: #CC9966;
  text-decoration: none;
}

私のリンク:

<%= link_to '&#9650;'.html_safe,{ :controller => :confessions, :action => :upvote, :id => conf.id }, :remote=>true %>

そして、呼び出される関連付けられた js.erb ファイル

$('#ajax').html("<%= escape_javascript(render :partial => 'layouts/confessions') %>");

ajax 呼び出しを使用しているときに a:visited を機能させるにはどうすればよいですか?

4

1 に答える 1

2

Sheikh がコメントしたように、これを行う最も簡単な方法は.visitedリンクにクラスを追加することです (他の唯一の方法は、ご想像のとおり、それほど広くサポートされていない html5 API を使用することです)。これを行う方法は、Rails ajax 呼び出しが成功した後にコールバックを設定することです。

$(function() {
  $('a').on('ajax:success', function() {
    $(this).addClass('visited');
  });
)};

これらのリンクを ajax 呼び出しで追加できる場合は、代わりに live を使用することをお勧めします。これにより、クリック間で状態が保持されないことに注意してください。そのためには、状態を Cookie などに保存する必要があるでしょう。

于 2013-02-24T00:40:22.443 に答える