鉴于控制器MapsController
:将呈现的HTML,以JSON
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
这使得JSON就好了。但现在,我想带一些HTML传递给注入到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);
});
这个JavaScript假定.listing
和.infowindow
属性在返回的每个JSON-对象。它们应该包含使用部分campings/_infowindow.html.haml
和campings/_listing.html.haml
呈现的HTML, 。
这是解决这个问题的正确角度吗?还是应该在JavaScript中构建HTML并避免发送HTML?如果是这样,是否还有一种方法可以使用partials来构建实际的HTML?
如何将listing
和infowindow
添加到对象Camping
模型没有这些字段?
我不知道这是如何呈现一个集合。在我看来,这需要包裹在一些'.each'或'.map'块中,而不是? – berkes 2013-04-24 14:47:47
对于你可以使用的集合:集合而不是:locals(假设你的模板是用这种方式编码的)。但是,是的,你可以先创建一个字符串,并从render_to_string中“收集”几个结果。 – 2013-04-24 14:51:15
我接受了这个答案,因为它解释了“render_to_string”,后者证明是解决我的问题的关键。 – berkes 2013-05-01 10:07:17