【发布时间】:2011-03-05 23:01:29
【问题描述】:
这是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。那应该是在它完成之后
【问题讨论】:
-
这是您上一个问题的重复:stackoverflow.com/questions/3069571/…。我建议输入更多代码。向我们展示部分、js 和远程提交标签。
-
@nathanvda:嗯,这个问题是直截了当的。我不想在这里混淆任何人,那是你问了一个新的。
-
从您的 cmets 看来,我认为您做得对,但还有其他问题。为了能够帮助您,我们需要查看更多代码。
标签: javascript jquery ruby-on-rails render facebox