Rails在页面加载后渲染单个部分

时间:2011-08-16 02:38:56

标签: ruby-on-rails ajax

我的应用程序中有一个名为_dashboard.html.erb的部分页面。在仪表板内部,我有很多调用来渲染不同的部分。其中一个是_calendar.html.erb partial,它调用谷歌日历并下拉事件列表。这个加载需要时间,我想在仪表板的其余部分加载后让_calendar部分加载。应该重申的是,我不希望它基于点击事件而是基于页面加载。

pages_controller.rb

# Logged in to shift
def jump
@title = "#{User.find(session[:user_id]).firstname}'s Dashboard"
@tasks = Task.where(:completed => 0)
@questions = Question.where(:answered => 0)


serv = GCal4Ruby::Service.new
serv.authenticate("email","pass")
cal = GCal4Ruby::Calendar.find(serv, {:title => "Skidmore Center for Sex and Gender Relations"})
#@events = GCal4Ruby::Event.find(serv, {'start-min' => Time.now.utc.xmlschema, 'start-max' => 5.days.from_now.utc.xmlschema })
@events = GCal4Ruby::Event.find(serv, {'start-min' => Time.parse("01/01/2011").utc.xmlschema, 'start-max' => Time.parse("06/01/2011").utc.xmlschema, :calendar => cal.id})

end

Jump是我有仪表板部分渲染的页面。以下是调用日历部分的/app/views/layouts/_dashboard.html.erb的一部分:

<div id="main-content">
  <div class="post">
    <h3>calendar</h3>
    <%= render 'layouts/calendar' %>
  </div>
</div>

和/app/views/layouts/_calendar.html.erb

<% @events.each do |event| %>
  <% if event.start_time >= Time.now and event.start_time <= 5.days.from_now %><li><%= event.start_time.to_s(:short) %> <%= event.title %></li><% end %>
<% end %>

我认为你应该记住的是,虽然我理解AJAX是如何工作的,但我自己或在Rails中几乎没有经验编码。这里的任何帮助都会受到赞赏(而且更加愚蠢和解释得更好!)

由于

更新: 我使用了async_partial gem,但现在我遇到了部分从Google日历中提取事件的问题。部分工作没有async_partial。

1 个答案:

答案 0 :(得分:0)

在没有gem的情况下处理这个问题的方法之一就是使用某种事件处理程序来处理页面加载事件。例如,使用jQuery,您可以:

// this get executed when jQuery is made available, which means when 
// your document is ready.
$(function () {

    // you replace the actual calendar content with the piece that is 
    // rendered with your partial
    $("#your-calendar-div-id").replaceWith('<%= escape_javascript(render 'layouts/calendar') %>');

});