繁体   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