簡體   English   中英

如何從Ruby on Rails幫助方法返回javascript?

[英]How can I return javascript from a Ruby on Rails helper method?

我有一個Note模型,它可以包含圖像鏈接附件(linktype =“image”或某些文本(linktype =“text)。當我顯示注釋時,顯示方法會根據鏈接類型而改變。例如:

<% @notes.each do |q| %>
    <h2 class="title"><%= q.name %></h2>
    <% if q.linktype == "other"%>
        <script type="text/javascript">some javascript</script>
    <% elsif q.linktype == "text"%>
        <%= q.text %>
    <% elsif q.linktype == "image"%>
       <img src="<%= q.link %>" />
    <% end %>
<% end %>

我必須在我的網站中以幾個不同的視圖顯示注釋,因此我不想多次重復查看代碼,而是希望將它放在一個地方並從不同的視圖中引用它。

我最初的想法是將顯示代碼放在幫助器中,如下所示:

<% @notes.each do |q| %>
    note_display(q.linktype, q.link)
<% end %>

但是一些顯示涉及javascript(第一個代碼塊中的第4行)。 我仍然可以使用輔助方法,即使我需要它來返回javascript嗎? 如果是這樣,我該怎么辦? 謝謝閱讀。

關於javascript沒什么特別的,你可以從幫助者那里返回它,因為你會返回其他的html內容。 我唯一建議的是使用幫助器來標記

image_tag(q.link)
javascript_tag("some javascript")
content_tag("h2", q.name, :class => "title")

就ERB而言,JavaScript只是字符串內容,就像模板呈現的其他內容一樣。 所以你的助手方法只能構造並返回一個字符串:

def note_display(note)
  content = ''
  content << content_tag('h2', h(note.name), :class => 'title')
  if note.linktype == 'other'
    content << javascript_tag("some javascript")
  elsif note.linktype == 'text'
    content << h(note.text)
  elsif note.linktype == 'image'
    content << image_tag(note.link)
  end  
  content
end

您可以使用以下輔助方法:

<% @notes.each do |n| %> 
  <%= note_display(n) %>
<% end %>

暫無
暫無

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

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