簡體   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