可以将jquery var传递给.js.erb文件中的ruby / rails实例变量吗?

时间:2012-02-27 05:35:10

标签: jquery ruby-on-rails

好吧所以我调用了一个调用html.erb部分的js.erb partial ..但是,我需要将一个变量从jquery partial传递给html.erb partial ...

基本上:

$(document).ready(function(){
  $('#aidmodel_brand').change(function() {
    $("select option:selected").each(function () {
      var brand = ($(this).text());
      $('#modeler').html('<%= escape_javascript(render(:partial => "shared/model", :brand => @brand)) %>'); 
    });
  });
});

我希望以某种方式将var品牌分配给实例变量@brand,以便我可以将选定的选项从下拉菜单传递到rails partial以生成下一个下拉菜单。

谢谢!

1 个答案:

答案 0 :(得分:0)

为什么这不能按照你想要的方式完成的原因是js.erb中的Javascript在(客户端)执行,执行ruby后执行(在服务器上)

所以这个 -

<%= escape_javascript(render(:partial => "shared/model", :brand => @brand)) %>

在服务器上执行,生成的js传递给客户端,很久以后,执行以下javascript。

function() {
    $("select option:selected").each(function () {
      var brand = ($(this).text());
      ...

现在要实现这个要求,你可以渲染ruby代码中的所有brand部分,然后让js做出选择。像 -

这样的东西
 $('#modeler').html(<%= escape_javascript(Brand.all.each{|b| render(:partial => "shared/model", :brand => b)}.join('')) %>)

 $(document).ready(function(){
  $('#aidmodel_brand').change(function() {
    $("select option:selected").each(function () {
      var brand = ($(this).text());
      var brand_finder = "." + brand
      var brand_block = $('#modeler').find(brand_finder)
      brand_block.show()  
    });
  });
 });

在“共享/模型”中,您可以为品牌块提供一个css类名,该名称与选项中的文本相同: