2012-04-13 32 views
3

ショーページでは、定期的なイベントの発生日の一覧を表示し、統計では、連続する日付間の最大、最小、平均間隔などのすべての日付を計算しました。best_in_place編集の完了時にイベントをトリガーする方法は?

私は、日付のインプレース編集を許可するためにbest_in_place gemを使用します。ただし、日付が変更されるたびに、統計を計算してサーバーから再描画する必要があります。

統計情報を再レンダリングできるように、コールバック関数をbest_in_place編集の完了にフックするにはどうすればよいですか?

これは私が次のコーヒーのスクリプトコードを試みたshow.html.erb

HTMLで

<td id="event_date"> 
    <span class='best_in_place' id='best_in_place_event_132_occur_date' data-url='/events/132' data-object='event' data-attribute='occur_date' data-type='input'>2012-03-23</span> 
</td> 

ある

<td id="event_date"> 
    <%= best_in_place @event, :occur_date %> 
</td> 

の私のRailsのコードです:

jQuery -> 
$("#best_in_place_event_*_occur_date").live 'ajax:complete', (evt, data, status, xhr) -> 
    alert "a date has changed" 

このdoesnのを私は日付を編集した後に何も起こらない(occur_date)。

best_in_placeの編集が成功したときに、どのようにイベントを引き起こすべきかは誰でも知っていますか?

+0

「統計は計算し、サーバーから再描画する必要があります」と言います。したがって、この再計算はモデル内で行われ、更新アクションでコントローラから呼び出されます。答える前に私の事実をまっすぐにしようとしています。 – IAmNaN

+0

はい、統計計算はモデルで実行され、統計情報(例:max、min、avg)はActiveRecordに保存されません。私はそれを正しくやっているかどうかはわかりませんが、私はコントローラを経由しない、私はモデルメソッドを呼び出すビューを持っています。ここに私のコードがあります。 'views/events/show.html.erb'で\t \t \t <%=レンダリング:partial =>" events_stats "、:locals => {:event => @event}%> そして' views/events/_event_stats .html.erb': <%stats = event。get_event_statsの%> <% if stats%>最短:<%=統計[:分]%>日最長:<%=統計【:最大]%>日平均:<%=統計【:平均]%>日 <% end %> –

答えて

2

ソースを見ると、best_in_placeはloadSuccessCallbackのajax:successイベントを正しく起動するようです。つまり、jQueryを使用して、変更されたイベントに独自の関数をバインドできるはずです。あなたの例のよう

$(".best_in_place").live 'change', (event) -> 
    alert "Hello, World!" 
+2

これは素晴らしい動作します。 jqueryの "live"メソッドを新しい "on"メソッドに置き換えてください。 – Stone

+1

右、@Stone。カレンは彼女の質問に「ライブ」を使用していましたが、私は「オン」で使用できる親要素を表示していませんでした。また古い答えです。 – IAmNaN

+0

完全に、ちょうど答えを見ている人に知らせるためにそこに置いておきたいのです。あなたの答えはbtwありがとう! – Stone

1

<td id="event_date"> 
    <%= best_in_place @event, :occur_date, :classes => 'bip_date' %> 
</td> 

$('.bip_date').bind("ajax:success", function(){ 
alert("a date has changed") 
}); 
// or: $('.event_data .best_in_place').bind(...)  

そしてofficial readmeから:

'AJAX:成功' イベントは成功時にトリガされます。

利用バインド:

$('.best_in_place').bind("ajax:success", function() 
{$(this).closest('tr').effect('highlight'); }); 

、特定のフィールドに固有のコールバックをバインドするヘルパーメソッドに 「クラス」オプションを使用し、そのクラスにバインドします。

<%= best_in_place @user, :name, :classes => 'highlight_on_success' %> 
<%= best_in_place @user, :mail, :classes => 'bounce_on_success' %> 

$('.highlight_on_success').bind("ajax:success", function(){bip_date}); 
$('.bounce_on_success').bind("ajax:success", function(){$(this).closest('tr').effect('bounce'));}); 
関連する問題