我用JBuilder创建了一个JSON视图。但我想将其预加载到数据对象中,这样Backbone就可以在不获取数据的情况下提前访问数据。
我该如何将list.json.jbuilder视图呈现到我的list.html.erb视图中?
通常没有使用JBuilder, 我会像这样做:
<div data-list="<%= @contents.to_json %>"></div>
我用JBuilder创建了一个JSON视图。但我想将其预加载到数据对象中,这样Backbone就可以在不获取数据的情况下提前访问数据。
我该如何将list.json.jbuilder视图呈现到我的list.html.erb视图中?
通常没有使用JBuilder, 我会像这样做:
<div data-list="<%= @contents.to_json %>"></div>
render
方法可以在视图中调用,返回传递的模板或局部模板的字符串渲染结果;你可以将该字符串嵌入到你想要的视图中。请注意:
list.html.erb
而不是 list.json.jbuilder
。如果你在 list.html.erb
中进行此调用,则尝试渲染 list.html.erb
将导致无限递归和 SystemStackError 错误。使用 :format
选项似乎不起作用。list.json.jbuilder
与 list.html.erb
在同一个目录中。raw
传递 render 方法的输出结果,否则当它嵌入到视图中时会被转义。因此,对于你的示例,假设模板位于 /app/views/foo
中,你可以编写以下代码:
<div data-list="<%= raw render(:template => "foo/list.json", :locals => { :contents => @contents }) %>"></div>
<%== %>
代替raw
。 - Mark G.<%= raw render template: "foo/list.json.jbuilder" %>
。 - MSC