【问题标题】:How can I return javascript from a Ruby on Rails helper method?如何从 Ruby on Rails 辅助方法返回 javascript?
【发布时间】:2011-03-19 12:25:28
【问题描述】:

我有一个 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 ruby-on-rails helpers


    【解决方案1】:

    javascript 没有什么特别之处,您可以从帮助程序返回它,就像返回其他 html 内容一样。我唯一建议的是将帮助器用于标签,如

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

    【讨论】:

      【解决方案2】:

      就 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 %>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-16
        • 1970-01-01
        • 2022-01-18
        • 2013-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        相关资源
        最近更新 更多