![](/img/trans.png)
[英]How to add dynamic Javascript code from view helper in Ruby on Rails 3?
[英]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.