作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个同时响应 html
和 js
的 Controller 。 html
View 渲染整个页面(包括页眉和页脚),而 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
部分,而不是实际 View 。
有没有办法让 Rails 查找 View 文件,而不是部分文件?
最佳答案
在另一个 View 中渲染非部分 View 并不完全是 Rails Way™。您当前的解决方案可能更好,而且并不是一种不常见的方法。如果您对部分名称与操作相同感到奇怪,请将其重命名为 _body 或其他适当的名称。
但是,如果您的 View 可以共享(在本例中似乎可以),您可以将其设为布局。
这得益于以下事实:Rails 将呈现 html
,这在某种程度上违反了最小意外原则。 js
的模板如果没有,则采取行动js
模板存在。这意味着您可以删除 js 模板和部分模板,然后仅创建一个标题为 fadein.js.erb
的布局。 :
# yourviews/show.html.erb
<div>Content!</div>
# layouts/fadein.js.erb
$("#main").fadeIn("<%= escape_javascript(yield) %>");
# YourController.rb
def show
# ...
respond_to do |wants|
wants.html
wants.js { render :layout => "fadein" }
end
end
关于ruby-on-rails - rails : Render a View (not a partial) From Within a View,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16328472/
我是一名优秀的程序员,十分优秀!