繁体   English   中英

Rails - 格式和渲染 - 它们如何工作?

[英]Rails - Formats and Rendering - How do they work?

据我所知,调用render将返回对浏览器的响应。 它可以返回不同类型的内容(html,json,js等)。 但是,我对浏览器之后的操作有点困惑。

如果响应是html,则浏览器只会呈现页面。 如果响应是json,通常,客户端js代码接受json响应并对其执行一些有用的操作。 如果响应是js,浏览器会做什么? 我不确定这个js是否附加到文档并执行? 这与Rails UJS有关吗?

另外,render是如何与respond_to相关的? 它们是并排使用,还是优先于另一种?

render html:
render js:
render json:

respond_to |format| do
  format.html
  format.js
  format.json
end

对不起,如果这可能看起来像很多问题,但我认为如果这些问题一起讨论会有所帮助。

如果响应是js,浏览器会做什么?

这完全取决于浏览器和用户的javascript环境。 您的应用程序返回js,浏览器将以其认为最佳的方式处理它。

我不确定这个js是否附加到文档并执行? 这与Rails UJS有关吗?

即使用户浏览器不处理javascript,UJS更多地与确保应用程序正常工作有关。 例如,您编写脚本来拦截按钮单击事件并取消单击操作,而不是执行其他操作,例如AJAX调用。 如果用户禁用了javascript,则不会发生此拦截。 因为您以这种方式编写了js,所以会发生正常的按钮单击操作。 两种情况都应该处理,两者都应该有效 - 这是不引人注意的使用javascript。

至于附加到文档,并非完全没有。 浏览器接收一堆代码,如果能够,它会在当前文档的上下文中运行该代码。 然后它不会将代码保存在任何地方,当它完成时它将被丢弃并且文档保留在脚本留下的任何状态。

渲染如何与respond_to相关? 它们是并排使用,还是优先于另一种?

respond_to允许您根据用户的请求控制用户的响应方式。 在上面的UJS示例中,这允许您有一个响应HTML和AJAX请求的方法,但知道差异并且可以对其响应进行任何需要的更改。

例:

respond_to |format| do
  format.html # will by default render the view with this actions name
  format.json do # lets pass back the object in json format
    render @object.to_json
  end
end

这些都是作为介绍性答案,非常简单,我建议进一步阅读每个主题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM