>我用JBuilder创建了一个json视图。但是我想将其预加载到数据对象中,以便 Backbone 可以尽早访问数据而无需获取数据。
如何将 list.json.jbuilder 视图呈现到我的 list.html.erb 视图中?
通常如果没有jbuilder,我会做这样的事情:
<div data-list="<%= @contents.to_json %>"></div>
render
从视图中调用时,返回传递的模板或部分的字符串呈现;您可以根据需要将该字符串嵌入到视图中。请注意:
- 您必须在模板名称后附加后缀/扩展名类型。如果你不这样做,Rails 可能会对你调用的模板文件感到困惑;IE:它可能选择
list.html.erb
而不是list.json.jbuilder
。如果从list.html.erb
进行此调用,则尝试渲染list.html.erb
会导致无限递归和 SystemStackError。对render
使用:format
选项似乎不起作用。 - 您必须指定模板的限定路径;它不会为"list.json"找到正确的模板,因为它
list.json.jbuilder
与list.html.erb
位于同一目录中。 - 你需要通过
raw
传递render
调用的输出;否则,当它嵌入到视图中时,它将被转义。
因此,对于您的示例,您可以编写以下内容,假设您的模板在 /app/views/foo
中:
<div data-list="<%= raw render(:template => "foo/list.json", :locals => { :contents => @contents }) %>"></div>