Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding rendered HTML to JSON

Given a controller MapsController:

class MapsController < ApplicationController
  def index
    @campings = Camping.finm(:all) #in reality a much more complex scope.
    respond_to do |format|
      format.html
      format.json { render :json => @campings }
    end
  end
end

This renders the JSON just fine. But now, I'd like to pass along some HTML to inject into the DOM:

$.ajax({
  dataType: "json",
  url: "maps.json?bounding=45.446465,-4.935988,53.944621,17.036668",
}).done(function (data) {
  //...
  var gInfoWindow = new google.maps.InfoWindow({
    content:  camping.infowindow
  });
  //...
  $("#campings").append(camping.listing);
});

This JavaScript assumes a .listing and .infowindow attribute in each returned JSON-Object. They should contain HTML, rendered with the partials campings/_infowindow.html.haml and campings/_listing.html.haml.

Is this the correct angle to tackle this? Or should I rather build the HTML within the JavaScript and avoid sending HTML? If so, is there still a way to use partials to build the actual HTML?

How can I add listing and infowindow to the ObjectsCamping model does not have these fields?

like image 793
berkes Avatar asked Mar 22 '26 13:03

berkes


1 Answers

Maybe a bit rough (and not 100% super the "Rails way") but working fine for me in a similar situation:

render :text => {:result => "success",
                 :document_row => render_to_string(
                                  :file => "admin/documents/_document_row",
                                  :formats => "html",
                                  :layout => false,
                                  :locals => {:documentable => documentable})}.to_json

so roughly just generating a hash and use render_to_string to get the html from th _document_row template.

like image 131
thorsten müller Avatar answered Mar 24 '26 09:03

thorsten müller