如何在best_in_place编辑完成后触发事件?

时间:2012-04-13 02:40:24

标签: jquery ruby-on-rails-3.1 best-in-place

在显示页面中,我显示了周期性事件发生的日期列表,并计算了所有日期的统计数据,例如最大值,最小值和连续日期之间的平均间隔。

我使用best_in_place gem来允许就地编辑日期。但是,每次更改日期时,都必须计算统计数据并从服务器重新呈现。

如何将回调函数挂钩到best_in_place编辑的完成,以便可以重新呈现统计数据?

这是我在show.html.erb中的Rails代码

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

在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>

我尝试了以下咖啡脚本代码:

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

这似乎不起作用,编辑日期(occurrence _date)后没有任何反应。

任何人都知道如何在成功的best_in_place编辑后触发事件?

2 个答案:

答案 0 :(得分:2)

好吧,看看源代码,似乎best_in_place在它的loadSuccessCallback中正确触发了ajax:success事件。这意味着您应该能够使用一些jQuery将自己的函数绑定到已更改的事件。

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

答案 1 :(得分: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:success'事件在成功时触发。

     

使用bind:

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

要绑定特定于特定字段的回调,请使用   帮助器方法中的'classes'选项,然后绑定到该类。

<%= 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'));});