簡體   English   中英

將HTML從控制器傳遞到Javascript的正確方法是什么?

[英]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_formath方法僅在視圖中可用。

還是我真的應該用Java做所有事情?

我認為您可以在所有使用helpers地方使用它們的長名稱:

ActionController::Base.helpers.simple_format str
ERB::Util:: html_escape str

一旦有了這個,您就可以自定義Model.to_json行為,以包含已經解析的Model.body版本。

當然,這種方法有兩個問題:

  1. 模型中的Rails依賴性
  2. 在模型中添加視圖行為

但是有時候,試圖避免這些問題帶來的復雜性超過了清晰度。

您可以像使用html一樣從erb模板返回JSON。 與其在控制器中返回JSON,不如像html響應那樣使其不進行任何渲染。 不用命名視圖index.hmtl.erb,而是將其命名為index.json.erb。

我不確定這是最好的清潔方法。 這是Rails為html或其他響應提供simple_format的唯一方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM