【问题标题】:how to include code into a js.erb view? in rails 3如何将代码包含到 js.erb 视图中?在轨道 3
【发布时间】:2012-10-16 10:12:38
【问题描述】:

我有一个使用不显眼的 ajax 的网站。

简而言之,流程是:

  • 远程链接
  • 请求由控制器管理
  • js.erb 视图将响应发送回浏览器

我希望我的所有 js.erb 视图都执行类似的“维护活动”,例如在需要时插入 flash 消息、更新 url 等。

我怎样才能使这个干燥?理想情况下,我每次都会使用要执行的代码的部分代码,但我找不到如何执行此操作。

我的 js.erb 文件:

$("#challenge_actions").html("<%= escape_javascript(render partial: "challenges/best_practice_button")%>");
$("#flash_messages").html("<div id='flash_notice'><%= escape_javascript(flash[:notice])%></div>");

如何提取带有 flash_messages 的行并将其自动包含在我的所有 js.erb 文件中?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    你可以使用 js 布局,就像 html 布局一样。

    layouts/custom.js.erb

    alert("<%=j flash[:notice] %>");
    <%= yield %>
    

    controllers/your_controller.rb

    def your_action
    
      flash[:notice] = "hello world"
      @hello = "hello world"
    
      respond_to do |format|
        format.js { render layout: "custom" }
      end
    end
    

    your_action.js.erb

    alert("<%= j @hello %>");
    

    【讨论】:

    • 这样做会先触发maintenance.js.erb,然后是your_action.js.erb?恐怕不是。但这就是我需要的。实际上类似于 before_filter 的东西。
    • 太棒了!非常感谢!
    【解决方案2】:

    你也可以在erb中使用部分模板,假设你想用id“容器”替换div的内容,那么假设你使用jquery你可以这样做

    $('#container').html('<%= escape_javascript(render(:partial => 'mypartial'))%>')
    

    【讨论】:

    • 可以,但是部分可以是 .js.erb 文件吗?请参阅更新 1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 2013-03-17
    相关资源
    最近更新 更多