Skip to content

Instantly share code, notes, and snippets.

@adamrobbie
Forked from joakimk/controller.rb
Created August 30, 2012 13:42
Show Gist options
  • Save adamrobbie/3528779 to your computer and use it in GitHub Desktop.
Save adamrobbie/3528779 to your computer and use it in GitHub Desktop.
A way to lazy load partials in Rails 3
class Controller
include LazyLoad
def show
@model = Model.find(...)
respond_to do |format|
format.html do
@html_specific_data = Model.find(...)
end
render_lazy_load(format) do
@lazy_specific_data = Model.find(...)
end
end
end
end
module Helper
def lazy_render(name)
content_tag :div, :id => "lazy-loaded-#{name}" do
content_tag :div, :class => "spinner" do
content_tag(:script) do
"if(!window.lazyLoads) { window.lazyLoads = []; }; window.lazyLoads.push('#{name}');".html_safe
end
end
end
end
end
module LazyLoad
def render_lazy_load(format, &block)
format.js do
block.call if block
render json: {
lazy_load_partial: params[:lazy_load_partial],
body: render_to_string(:partial => params[:lazy_load_partial])
}
end
end
end
if window.lazyLoads
for lazyLoad in window.lazyLoads
url = window.location.href + "?format=js&lazy_load_partial=#{lazyLoad}"
$.ajax url: url, dataType: "json", success: (data) ->
$("#lazy-loaded-#{data.lazy_load_partial}").html(data.body)
= render 'foobar'
becomes
= lazy_render 'foobar'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment