如何从javascript渲染部分

99m*_*les 9 javascript ruby ruby-on-rails

我有一个选择,根据不同选择中的选择进行填充为了做到这一点,我在"动态选择菜单"的Railscast#88中做了推荐.

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

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

谁有一个很好的解决方案?

mil*_*raf 8

我想这就是你要找的东西.我在DIV中使用"colors"ID渲染局部,仅当所选单选按钮的值为红色时才会渲染局部:

<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>
Run Code Online (Sandbox Code Playgroud)

  • 我尝试过这个。这只是将 #{escape_javascript(render :partial =&gt; "&lt;path_to_partial&gt;")} 作为文本打印在页面上。 (2认同)
  • @Bongs这假定进入.erb文件,以便ruby,#{escape_javascript(render:partial =>"<path_to_partial>")}将被适当替换,而不是被解释为字符串文字. (2认同)
  • 一些主要的事情。即使在.erb文件中,您也需要将字符串包装在&lt;%=%&gt;中,并确保使用双引号。Ruby不会对单引号进行字符串插值。这也只会渲染一次。问题显然是希望在JavaScript操作上呈现。不赞成投票 (2认同)

Mik*_*cic 7

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

您最好的选择是执行以下操作:

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