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