Javascript嵌入ruby呈现局部调用,如何传递变量';s值

Javascript嵌入ruby呈现局部调用,如何传递变量';s值,javascript,ruby-on-rails,render,partial-views,renderpartial,Javascript,Ruby On Rails,Render,Partial Views,Renderpartial,单击后,我调用一个javascript,在这里我将单选按钮值捕获到javascript中的一个变量中。然后,我调用一个渲染部分,将此单选按钮变量作为本地变量传递。 我得到了一个错误:未定义的局部变量或#ruby_-button_-value的方法“radio_-button_-value”是一个JS变量,ruby永远不会理解这一点,因为从技术上讲,当ruby完成加载时它甚至不存在(ruby在服务器上运行,JS在客户端上运行) 您要做的是通过AJAX将ruby_按钮_值传递给您的控制器,然后根据该

单击后,我调用一个javascript,在这里我将单选按钮值捕获到javascript中的一个变量中。然后,我调用一个渲染部分,将此单选按钮变量作为本地变量传递。

我得到了一个错误:未定义的局部变量或#
ruby_-button_-value
的方法“radio_-button_-value”是一个JS变量,ruby永远不会理解这一点,因为从技术上讲,当ruby完成加载时它甚至不存在(ruby在服务器上运行,JS在客户端上运行)


您要做的是通过AJAX将ruby_按钮_值传递给您的控制器,然后根据该值获取变量值。

这不会按照您希望的方式工作

当被请求时,Ruby在服务器上运行并生成HTML和JS代码。此HTML标记将发送到客户端,由浏览器在客户端呈现。现在的问题是,你的浏览器不懂Ruby,只懂HTML和JS。因此,它会将您的Ruby脚本视为字符串(因为qoutes),只需在您的div中打印即可

方法是向您的服务器(理解Ruby)发送AJAX请求,并使其返回HTML/JS,这是浏览器可以理解的

也许你会想看看这些


以下代码大概在某个html.erb文件中:

<script>
 function render_dir_partial() {
     alert('in javascript.');
     alert("you chose the option: " + $('form input[type=radio]:checked').val() );
     radio_button_value = $('form input[type=radio]:checked').val();
     alert ("radio_button_value: " + radio_button_value );
     $('#dir_list').html('<%=j render :partial => "dir_list", :locals => { :dir_choice =>     radio_button_value } %>')
}
</script>
…您仍然会收到相同的错误,因为:

  • js radio_button_value变量在浏览器收到文件之前仍然不存在,但是rails必须在服务器将页面发送到浏览器之前将radio_button_value变量的值分配给dir_choice变量

  • 这里是真正的问题:Ruby代码甚至不能引用js代码中的变量,反之亦然。如果您的ruby代码提到一个名为radio_button_value的变量,那么当ruby代码执行时,必须在ruby代码中定义该变量。Ruby代码甚至不知道javascript已经被发明出来了。如果您在js代码中提到一个名为radio_button_value的变量,那么当js代码执行时,它必须在js代码中定义


  • 我也试着做同样的事情,但你不能真正做到你想做的

    Ruby将计算字符串
    '“dir\u list”,:locals=>{:dir\u choice=>单选按钮值}%>'
    并将给出一个错误,因为Ruby中未定义
    单选按钮值
    。如果在那里插入javascript变量,Ruby将给出相同的错误,因为javascript变量也不会在Ruby中定义。这一切都发生在服务器执行时,甚至在代码到达浏览器之前,而浏览器是执行javascript的地方

    因此,我们有两种选择:

  • 在服务器端执行所有逻辑。下拉列表将提交一个表单,该表单将在url参数中传递变量

  • 阿贾克斯。Javascript将向服务器发出http请求并呈现结果。查看www.tutorialspoint.com/ruby-on-rails/rails-and-ajax.htm


  • JavaScript在客户端运行,Ruby在服务器上运行。
    <script>
    function render_dir_partial() {
        alert('in javascript.');
        alert("you chose the option: " + $('form input[type=radio]:checked').val() );
        radio_button_value = $('form input[type=radio]:checked').val();
        alert ("radio_button_value: " + radio_button_value );
        $('#dir_list').html('<%=j render :partial => "dir_list", :locals => { :dir_choice =>   "watchfolder" } %>')
    }
    </script>
    
    <script>
     function render_dir_partial() {
         alert('in javascript.');
         alert("you chose the option: " + $('form input[type=radio]:checked').val() );
         radio_button_value = $('form input[type=radio]:checked').val();
         alert ("radio_button_value: " + radio_button_value );
         $('#dir_list').html('<%=j render :partial => "dir_list", :locals => { :dir_choice =>     radio_button_value } %>')
    }
    </script>
    
    <script>
      var radio_button_value = "hello";
    
      $('#dir_list').html('<%=j render :partial => "dir_list", :locals => { :dir_choice =>     radio_button_value } %>')
    }
    </script>