[英]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.