【问题标题】:Passing JavaScript value to Ruby in ERB在 ERB 中将 JavaScript 值传递给 Ruby
【发布时间】:2019-06-18 09:04:16
【问题描述】:

我想将 JavaScript 值作为参数传递给 ERB 中的 Ruby 函数。

index.html.erb 的代码

function ABC(){
  variable = document.getElementById('textfield').value;
}

function XYZ(){
  <%= ruby_function(variable) %>
}

我需要帮助才能实现这一目标。

【问题讨论】:

  • 你不能那样做,你应该用一个 js 变量调用 ajax 来执行你的 ruby​​ 方法。
  • 感谢您的评论,您能帮我处理 AJAX 调用以及我应该如何将变量作为参数传递。
  • 您想将变量传递给您的 HTML 视图吗?即abc.html.erb?
  • 它是 Rails 视图吗?
  • 您的具体要求是什么?

标签: javascript ruby-on-rails erb


【解决方案1】:

实现此目的的适当方法是在脚本中使用 ajax。

例如,您可以使用咖啡脚本并执行类似的操作。

ABC = ->
  variable = document.getElementById('textfield').value
  res = $.ajax(
    url: '#{method_controller_path}'
    method: 'GET'
    data:
      param: variable
    dataType: 'json'
    success: (res) ->
      res
  )

最后,您将拥有 res 对象。

如果您不使用咖啡或外部脚本文件。您可以使用 index.html.erb 文件中的 javascript 来执行此操作。

这是一个例子。

const ABC = function() {
  let res;
  const variable = document.getElementById('textfield').value;
  return res = $.ajax({
    url: '#{method_controller_path}',
    method: 'GET',
    data: {
      param: variable
    },
    dataType: 'json',
    success(res) {
      return res;
    }
  });
};

希望这对您有所帮助。 :)

【讨论】:

  • 我想将function ABC() 保持独立,只需将值作为参数传递。那么你能告诉我如何使用 ajax 将值作为参数传递
  • Ajax 将向您在 url 属性中使用的路由发送请求。因此,您针对该路由使用的 ruby​​ 方法将接收该值作为请求参数。您必须在控制器中允许这些值,然后根据需要使用这些值。
【解决方案2】:

这个可以在没有 Jquery 的情况下工作。

红宝石控制器:

class MyServiceController
  def variable
    @var = ruby_function(params[:js_var])
    responde_to do |format|
      format.js { render json: @var }
    end
  end
end 

js函数:

  function XYZ(){
    var variable = document.getElementById('textfield').value;
    var xhr = new XMLHttpRequest();
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.open('POST', 'myservice/variable');
    xhr.onload = function() {
      var rubyResponse = xhr.responseText;
    };
    xhr.send(encodeURI('js_var=' + variable));
  }

【讨论】:

    【解决方案3】:

    如果您将 ERB(嵌入式 ruby​​)写入 html 中的脚本标记内并且该文件是 ERB 文件,则可以使用它。此 javascript 中的 ruby​​ 代码示例是良性的,但说明了如何执行此操作。

    <body>
      <%= render 'shared/overlay' %>
      <%= render 'shared/notice_alert_modals' %>
      <header>
        <%= image_tag header_logo, class: 'logo' %>
      </header>
      <div class="content">
        <%= yield %>
      </div>
      <script>
        $(document).ready(function(){
          // append some tag with erb ruby
          var html = "<h2>ABC<%= %w[D E F].split(' ').join %></h2>"
          $('body').append(html)
        })
      </script>
    </body>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-21
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 2018-09-26
      • 2011-06-24
      相关资源
      最近更新 更多