在ruby代码中使用javascript变量

时间:2016-01-19 07:41:57

标签: jquery ruby-on-rails

以我的红宝石形式,

$('#some_id').change(function(){
    var value = $(this).val();
    var index = $(this).attr('id').to_i;

    $('option_value_0').html('<%= escape_javascript render partial: 'color_form', locals: { f: f, index: index, id: value } %>')
})

这是javascript部分。由于

,它会引发错误
  

未定义的方法索引和值。

我该如何解决这个问题?提前致谢。

2 个答案:

答案 0 :(得分:1)

您无法使用JavaScript在HTML页面中注入ruby代码。在将生成的HTML页面发送到浏览器之前,在服务器上处理ERB模板。您可以在浏览器加载页面后查看页面来源,但您不会看到任何<%= ... %>标记,因为它们已由服务器呈现。

您的JavaScript会在浏览器中添加ruby代码,但浏览器无法理解ruby。

您可能希望查看支持部分(或模板)的JavaScript框架,例如AngularJS

答案 1 :(得分:1)

Ce ne pas possible,mon ami。

正如评论中所提到的,Ruby是服务器; javascript是客户端。这意味着以下两件事之一:

  • 在运行时构建javascript(不推荐)
  • 将ajax / javascript值发送到服务器(通过Ajax)

要使其正常工作,您需要通过ajax发送请求:

#config/routes.rb
get "color_form", to: "application#color_form"

#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
   respond_to :js, :html

   def color_form
     @id    = params[:id]
     @value = params[:value]
   end
end

#app/views/application/color_form.js.erb
$('option_value_0').html('<%=j render partial: 'color_form', locals: { index: @index, id: @value } %>')

这需要通过适当的途径来解决。控制器动作:

color_form

-

,这是啰嗦,但它是正确的方式。

如果您想要快捷方式,则可以预加载id部分,然后使用javascript功能更改valuemodals参数。如果你愿意,我可以写下这个。

<强>预压

如果你想在没有 ajax的情况下这样做,标准方式(这也包括#view <div class="hidden"> <%= render partial: 'color_form', locals: { f: f, index: "x", id: "y" } %> </div> #app/assets/javascripts/application.js $(document).on("change", "#some_id", function(e) { $partial = $(".hidden").html(); $partial.find("#id").html($(this).attr('id').to_i); $partial.find("#index").html($(this).val()); $('option_value_0').html($partial); }); )是将部分附加到你的页面并“隐藏”它。

这样,您的JS就会显示或附加到页面的其他部分的实际HTML代码:

{{1}}