2012-04-13 116 views
3

在显示页面中,我会显示定期事件发生日期的列表,并计算所有日期的统计数据,如最大值,最小值和连续日期之间的平均间隔。如何在完成best_in_place编辑时触发事件?

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

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

这是show.html.erb

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

我的Rails代码的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" 

这并未我似乎没有工作,编辑日期(发生日期)后没有任何反应。

任何人都知道我应该在成功的best_in_place编辑时触发事件吗?

+0

你说,“统计数据必须进行计算,并从服务器重新呈现。”所以这个重新计算在模型中发生,并在更新操作中从控制器调用,对吧?只是在回答之前试图弄清楚我的事实。 – IAmNaN 2012-04-14 21:23:24

+0

是的,统计计算是在模型中完成的,并且统计数据(例如max,min,avg)不存储在ActiveRecord中。不知道我是否做得对,但我没有通过控制器,我有视图调用模型方法。这是我的代码。在'views/events/show.html.erb'中\t \t \t <%= render:partial =>“events_stats”,:locals => {:event => @event}%> 而在'views/events/_event_stats .html.erb': <%stats = event。get_event_stats%> <% if stats%>最短:<(%)=统计[:分钟]%>天最长:<(%)=统计[:最大]%>天平均:<(%)=统计[:平均]%>天 <% end %> – 2012-04-17 04:36:03

回答

2

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

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

这很好。只要确保用新的“on”方法替换jquery的“live”方法。 – Stone 2013-09-14 02:12:20

+1

对,@Stone。 Karen在她的问题中使用了“live”,她并没有显示出我可以用'on'来使用的父元素,而且这也是一个旧的答案。 – IAmNaN 2013-09-17 01:14:37

+0

完全,只是想把那里告诉任何人看现在的答案。感谢您的答案btw! – Stone 2013-09-18 00:33:04

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'));}); 
相关问题