这是facebox弹出内容
<div class="form_container">
<% form_remote_tag :url => { :action => 'custom', :d=>params[:day], :h=>params[:hour] },
:class => 'general-form',
:update => 'grid['+params[:day]+']['+params[:hour]+']',
:success => 'handle_success('+params[:day]+','+params[:hour]+')' do -%>
<table width="300px" style="border:none">
<% @availability_hash.each_key do |availability_id| %>
#some view related stuff
<% end %>
</table>
<input type="submit" class="btn" value="Re-assign Coaches" />
<% end %>
</div>
这是控制器方法
def custom
master_scheduler
h = params[:h].to_i
d = params[:d].to_i
render(:partial => "grid_item" , :locals => {:day=>d, :hour=>h})
end
这是部分(_grid_item.html.erb)
<div class ="left_inner_element">
<div class="l_upper_element">
<div class="coaches_committed"><%= data[:committed_coaches] %></div>
<div class="coaches_available"><%= data[:available_coaches] %></div>
</div>
<div class="l_lower_element"><%= data[:classes] %> : <%= data[:avg_attendance] %>
</div>
</div>
<a id="link[<%= day %>][<%= hour %>]" rel="facebox" href="coach_selector_popup?(bla bla)" >
<div class ="right_inner_element right_inner_color_<%= data[:color_code] %>">
#some ui stuff
</div>
</a>
这是主页面中使用的脚本
<script type="text/javascript">
jQuery(document).ready(function($) {
jQuery('a[rel*=facebox]').facebox()
$.facebox.settings.opacity = 0.5
})
function handle_success(d,h){
jQuery(document).trigger('close.facebox');
var link_div = document.getElementById('link['+d+']['+h+']');
jQuery(link_div).facebox();
}
</script>
<div class="master_view">
<table class="master_scheduler_table" id="master_scheduler_table" >
<% HOURS_IN_A_DAY.each do |hour| %>
<tr>
<td><%= time(hour*2) %></td>
<% DAYS_IN_A_WEEK.each do |day| %>
<td id="grid[<%= day %>][<%= hour %>]" >
<%= render(:partial => "grid_item" , :locals => {:day=>day, :hour=>hour, :data=>@data[day][hour]}) %>
</td>
<% end %>
</tr>
<% end %>
</table>
</div>
渲染完成后,我想调用一个 javscript。怎么做?我正在使用视图中的 form_remote_tag。
渲染部分是在 Ajax 上下文中完成的,不会发生页面重新加载。form_remote_tag 有一个 :success 方法,我可以在其中调用 javascript。不幸的是,我在成功方法中放置的 javascript 在渲染完成之前被调用。但是,我需要在渲染完成后调用 javascript。
为了清楚起见,我只是在问题中添加了一条警报消息。实际上,我正在渲染的 DIV 元素上调用 facebox() 方法。facebox() (jQuery 的)方法应该在 DIV 元素被渲染之后应用到它,然后它才会生效。
编辑:我已经添加了完整的代码。如果您能看到,我将在 Ajax 返回后调用 javascript 方法 handle_success。(我很抱歉将 :success 方法放在部分中)。在实际渲染完成之前调用 handle_success。那应该是在它完成之后