如何从javascript渲染部分

时间:2010-02-25 02:17:12

标签: javascript ruby-on-rails ruby

我根据不同选择中的选择填充了一个选择 为此,我在“动态选择菜单”的Railscast#88中做了推荐。

但是现在我需要渲染一个部分,传入每个选择中选择的值。 我无法弄清楚如何简单地从select中的:onchange事件触发方法调用,所以我想我需要在检测选择更改事件的javascript处理程序中调用render:partial。但我无法弄清楚如何。我在javascript方法中尝试了以下内容(在.js.erb文件中),但它没有按预期工作:

function staffSelected() {
    $('date_area').show();
    <% render :partial => "calendar" -%>
}

任何人都有一个很好的解决方案吗?

2 个答案:

答案 0 :(得分:8)

我认为这就是你要找的东西。我使用“colors”ID在DIV中渲染部分,仅当所选单选按钮的值为红色时才会呈现partial:

<script language="javascript" type="text/javascript">
jQuery(function($){
  $('#radio-buttons input[type=radio]').click(function() {
    if ($(this).attr("value") === "red") {
      $("#colors").html('#{escape_javascript(render :partial => "colors")}');
    }
  });
});
</script>

答案 1 :(得分:6)

您无法在JavaScript中部分渲染以检测更改事件。 Ruby是服务器端,JavaScript是客户端。当您的JavaScript运行时,您的Ruby已经被解析为常规的“HTML”。

最好的办法是做以下事情:

使用AJAX控件(有Prototype / scriptaculous)在onchange事件中命中你的服务器。您的服务器可以发回RJS以更新其他下拉列表,它可以返回标准JSON,您可以在AJAX调用的onSuccess方法中手动填充其他下拉列表。