Javascript嵌入ruby呈现局部调用,如何传递变量';s值
单击后,我调用一个javascript,在这里我将单选按钮值捕获到javascript中的一个变量中。然后,我调用一个渲染部分,将此单选按钮变量作为本地变量传递。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_按钮_值传递给您的控制器,然后根据该
我得到了一个错误:未定义的局部变量或#
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>
…您仍然会收到相同的错误,因为:
我也试着做同样的事情,但你不能真正做到你想做的 Ruby将计算字符串
'“dir\u list”,:locals=>{:dir\u choice=>单选按钮值}%>'
并将给出一个错误,因为Ruby中未定义单选按钮值
。如果在那里插入javascript变量,Ruby将给出相同的错误,因为javascript变量也不会在Ruby中定义。这一切都发生在服务器执行时,甚至在代码到达浏览器之前,而浏览器是执行javascript的地方
因此,我们有两种选择:
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>