【问题标题】:How to render only js without html (template, layout) in Rails如何在 Rails 中仅渲染没有 html(模板、布局)的 js
【发布时间】:2019-05-11 13:10:14
【问题描述】:

我有控制器 Message_Controller 并且这个控制器在这个方法中有方法“消息”我想渲染 .js.erb 文件我需要从 rails 控制器调用 js 函数。我需要在没有 html-template(layout) 的情况下重新渲染它,只有 js-这段代码中的代码我将使用 args 调用 js-function。如何制作它?

我的路线:

 post 'chat_bot/message', to: 'chat_bot#message'

我的控制器:

class ChatBotController < ApplicationController
     layout false

    def message
         #gon.watch.message = params[:text]
        @message = params[:text]
            puts @message
        render partial: 'message.js.erb', layout: false
    end


end

我的 message.js.erb 文件

alert('<%=@message %>');

【问题讨论】:

    标签: javascript ruby-on-rails render erb


    【解决方案1】:

    render partial: 'message.js.erb', layout: false
    

    Rails 将在响应该控制器的文件夹中查找名为 _message.js.erb 的部分。

    您可以使用respond_to 并指定格式和渲染内容:

    def message
      respond_to do |format|
        format.html { render partial: 'message.js.erb' }
      end
    end
    

    如果您愿意,可以跳过实例变量分配,因为您可以访问请求中的参数。

    如果您的想法是“评估”警报,那么它仍然应该在脚本标签内:

    <script>
      alert("<%= params[:text] %>");
    </script>
    

    【讨论】:

    • 您好,谢谢。有用。但是当我使用渲染然后打开新页面“/chat_bot/message”。如何在不打开新页面的情况下从控制器调用函数?
    • 您可以发出 JSON 请求。
    【解决方案2】:

    只需用

    更新它
    def message
      @message = params[:text]
      respond_to do |format|
         format.js
      end
    end
    

    【讨论】:

    • 如何在不打开新页面的情况下从控制器调用函数?
    • 使用 dataType: "script" 进行 ajax 调用
    猜你喜欢
    • 2011-04-28
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2012-12-31
    • 1970-01-01
    相关资源
    最近更新 更多