【问题标题】:How can I output a helper from erb.js in rails 3?如何在 rails 3 中从 erb.js 输出帮助程序?
【发布时间】:2011-08-15 22:15:16
【问题描述】:

这是我的 erb.js 文件中的内容....但它不起作用:

  1 //Update with a message
  2 $('#follow-update').html("<%= follow_button(@question) %>")

follow_button 是一个助手:

20   def follow_button(resource)
 21     
 22     type = resource.class.name
 23     follow_status = current_user.following?(resource)
 24 
 25     verb = "Follow" if follow_status == false
 26     verb = "Unfollow" if follow_status == true
 27 
 28     content_tag(:div, :class => "follow-button") do
 29       link_to "#{verb} this #{type} ", follow_path(:followed_type => type,
 30                                                   :followed_id => resource.id,
 31                                                   :follow_verb => verb), 
 32                                                   :class => "button",
 33                                                   :remote => true
 34     end
 35   end
 36 end

帮助器独立工作正常,但我希望它更新我的按钮。也许有一种方法可以只更新文本而不替换整个帮助器?

【问题讨论】:

  • hmm...好吧,我只是更改了按钮文本,到目前为止还不错...可能需要删除它... :)
  • 不,我确实需要它来重新显示帮助程序,因为逻辑需要再次运行......

标签: jquery ruby-on-rails helper


【解决方案1】:

创建一个包含你的部分只包含你的助手。

例如:'/wherever/_follow_button.html.erb'

在里面,调用你的助手:

<%= follow_button(question) %>

接下来,使用 JS 渲染它。

$('#some-id').html("<%= escape_javascript(render('/wherever/follow_button', :question => @question)) %>");

有一些方法可以提高效率,但希望这对现在有所帮助。

【讨论】:

  • 转义返回的值,如上所述,为我修复了它。
【解决方案2】:

您不能从 js.erb 文件中调用辅助方法,除非您按照 Using a Rails helper method within a javascript asset 中的描述明确包含它。例如:

<% environment.context_class.instance_eval { include ApplicationHelper } %>

你也应该小心转义你的 HTML。

【讨论】:

    【解决方案3】:

    抱歉,我现在不能测试,但是你注意过 html 安全还是 javascript 转义?

    例如尝试将您的follow_button(@question)附在raw()escape_javascript()中?

    【讨论】:

      【解决方案4】:

      你需要 escape_javascript

      $('#follow-update').html("<%= raw( escape_javascript( follow_button(@question ))) %>");
      

      如果这不起作用,请参阅显示返回的 ajax 文本和按钮 html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 2011-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-20
        相关资源
        最近更新 更多