我有一个控制器,可以同时响应html
和js
。 html
视图将整个页面呈现出来(包括页眉和页脚),而js
只会替换#main
。 除了页眉和页脚之外,这两种格式呈现的内容相同。 我可以通过三个文件实现这种效果:
_show.html.erb
<div>Content!</div>
show.html.erb
<%= render "show" %>
show.js.erb
$("#main").fadeIn("<%= escape_javascript(render 'show') %>");
这个方法可行,但我希望不需要单独的_show
部分。不幸的是,下面的方法不起作用:
show.html.erb
<div>Content!</div>
show.js.erb
$("#main").fadeIn("<%= escape_javascript(render 'show') %>");
作为Rails将寻找“show”局部视图而非实际视图,是否有办法让Rails查找视图文件而不是局部视图?
:file
选项,例如:file => 'show'
。渲染辅助程序将会将render 'yourview'
的字符串参数隐式转换为render :partial => 'yourview'
。然而,你将遇到的问题是,在js动作中查找上下文将把"show"解析为js版本,可能导致无限循环或类似的问题。 - numbers1311407_body
。在这种情况下,您通常会看到render(@resource)
,它会转换为局部路径,例如resources/_resource
。 - numbers1311407lookup_context.update_details(:formats => [:html]) { @content = render_to_string }
。然后在js视图中,您可以使用render(@content)
。但是那是Rails 3.0.x,即使当时也可能不是一个干净的解决方案。 - numbers1311407show.html.erb
,然后创建单独的javascript布局,甚至可以共享。例如,您可以将其称为fadein.js.erb
。 - numbers1311407