問題の説明:
リンクのセットを含むビューがあります。
<% @feeds.each do |f| %>
<div class="feed">
<span class="feed_counts"> <%= f.display_counts %> </span>
<%= link_to "refresh", { :controller => 'Feeds', :action => "refresh_feed", :feed_id => f.id}, :remote => true, :class => 'refresh_feed_link' %>
</div>
<% end %>
ユーザーはリンクをクリックして、次のコントローラーメソッドを起動します。
def refresh_feed
@feed = Feed.find(params[:feed_id])
@feed.parse
end
次に、対応するspan-elementの内容を@feed.total_count値に変更します。
私の試み:
さて、私が知っているように、ページ全体をリロードせずにそれを行うには2つの方法があります:
方法1:
レイアウトにjsを含めることができます:
<%= render :partial => 'shared/partial_js' %>
そして、partial_jsでこのコードを使用します。
<script type="text/javascript">
$().ready(function() {
$('.refresh_feed_link').bind('click', function() {
$(this).closest('.feed').find('span.feed_counts').text('woo');
});
});
</script>
この場合、「$(this)」があり、対応する「span」要素を見つけることができます。しかし、@feed変数値を取得する可能性はありません。
方法2:
追加できます
respond_to do | format |
format.js {render :layout => false}
end
コントローラに追加して、refresh_feed.js.erbファイルを作成します。このJSファイルでは、変数を<%@ feed.total_count%>として使用できますが、複数のリンクのどれがクリックされたかわかりません。つまり、このファイルの$(this)変数は(window)になり、対応するspan要素が見つかりません。
質問:
私が欲しいものを手に入れる方法はありますか?
前もって感謝します。