最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

ruby on rails - How to render a partial from javascript - Stack Overflow

programmeradmin3浏览0评论

I have a select that gets populated depending on the selection in a different select To do this, I did what is recommended in Railscast #88 on 'Dynamic Select Menus'.

But now I need to render a partial, passing in the value selected in each of those selects. I can't figure out how to simply trigger a method call from the :onchange event in the select, so I'm thinking I need to call render :partial from within the javascript handler that detects the selects change event. But I can't figure out how. I tried the following in the javascript method (in the .js.erb file) but it doesn't work as hoped:

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

Anyone have a good solution?

I have a select that gets populated depending on the selection in a different select To do this, I did what is recommended in Railscast #88 on 'Dynamic Select Menus'.

But now I need to render a partial, passing in the value selected in each of those selects. I can't figure out how to simply trigger a method call from the :onchange event in the select, so I'm thinking I need to call render :partial from within the javascript handler that detects the selects change event. But I can't figure out how. I tried the following in the javascript method (in the .js.erb file) but it doesn't work as hoped:

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

Anyone have a good solution?

Share Improve this question asked Feb 25, 2010 at 2:17 99miles99miles 11.2k19 gold badges82 silver badges125 bronze badges 1
  • 2 Um, well, for one thing, and this is really just to get started, that line of erb isn't outputting anything because it should be '<%=' instead of '<%'. Beyond that, I think you're going to have to post the contents of that partial, be more specific about the behavior you're looking for. – tfwright Commented Feb 25, 2010 at 4:05
Add a comment  | 

2 Answers 2

Reset to default 10

I think this is what you are looking for. I am rendering the partial within a DIV with "colors" ID, the partial is rendered only if the selected radio button's value is red:

<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>

You can't render a partial inside of JavaScript to detect change events. Ruby is server side, and JavaScript is client side. By the time your JavaScript runs, your Ruby has already been parsed into regular ol' HTML.

Your best bet is to do the following:

Use an AJAX control (there are Prototype/scriptaculous ones) to hit your server in the onchange event. Your server can send back RJS to update the other dropdowns, or it can return back standard JSON and you can populate the other dropdowns manually in the onSuccess method of the AJAX call.

发布评论

评论列表(0)

  1. 暂无评论