[英]What is the proper way of passing HTML from the controller to Javascript?
在我的應用程序中,我讓用戶輸入可能不安全的注釋。 當我在視圖中渲染它們時,以下內容很好地顯示了注釋:
<%= simple_format h annotation.body %>
它保留換行符,但也可以正確地轉義HTML。 現在,我需要在由Javascript創建的疊加層中呈現此主體。 現在,我通過從控制器調用以下命令來通過JSON獲取注釋:
def index
# ...
respond_to do |format|
format.json { render :json => @annotations }
end
end
然后像這樣創建疊加層(非常簡化的示例):
$.getJSON(this.annotations_url, function(data) {
$.each(data, function(key, val) {
annotation = val;
this.div_body.html(annotation.body);
// ...
當然,生成的HTML將無法正確轉義,並且也不會保留換行符。
現在,我不希望使用純Javascript進行轉義和換行轉換,因為如果這樣做,我感覺我不會干很多。 似乎很難維護並使整個代碼混亂。
我不能以某種方式通過JSON從控制器發送安全的HTML正文嗎? 看來ERB simple_format
和h
方法僅在視圖中可用。
還是我真的應該用Java做所有事情?
我認為您可以在所有使用helpers
地方使用它們的長名稱:
ActionController::Base.helpers.simple_format str
ERB::Util:: html_escape str
一旦有了這個,您就可以自定義Model.to_json
行為,以包含已經解析的Model.body
版本。
當然,這種方法有兩個問題:
但是有時候,試圖避免這些問題帶來的復雜性超過了清晰度。
您可以像使用html一樣從erb模板返回JSON。 與其在控制器中返回JSON,不如像html響應那樣使其不進行任何渲染。 不用命名視圖index.hmtl.erb,而是將其命名為index.json.erb。
我不確定這是最好的清潔方法。 這是Rails為html或其他響應提供simple_format的唯一方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.