开发者

Rails RJS with jQuery - Why is my page not updating?

I have an html select element with a bound javascript change event using jQuery. When a change occurs, one of a few different events could happen depending on the selected option. The initial call is made via ajax to the rails controller where the logic is handled.

One of three things are possible here:

  1. some page elements are disabled
  2. some page e开发者_StackOverflowlements are enabled
  3. additional page elements are added

For some reason, I cannot get #3 to work! Firebug shows me the correct request and response headers and the server is telling me that the templates are being rendered successfully, yet nothing will show up on the screen. I've gone so far as to hard-code the element ID have tried simple renderings, but still no luck.

Here's my RJS file:

# IF A BUTTON DOES NOT ALREADY EXIST  
page << "if($('<%= @button_id.to_s %>').length < 1){"  

    # GENERATE THE ID OF THE DIV ELEMENT THAT I NEED TO ADD ELEMENTS AFTER  
    field_type_selector = '#q_'+@q_id.to_s+'_field_type_div';  

    # AFTER THE DIV HOLDING THE SELECT ELEMENT, RENDER THE PARTIAL THAT ADDS SOME OPTIONS AND A BUTTON  
    page[field_type_selector].after(render(:partial=>'question_builder/add_option_button_during_edit'))

# IF THE BUTTON IS ALREADY THERE  
page << "}else{"  

    # ENABLE THE ELEMENTS THAT WERE PREVIOUSLY DISABLED  
    page[@choices_div + " :input"].removeAttr('disabled')  
    page[@choices_div].removeClass('disabled')  
page << "}"`

I've tried hard-coding the element ID, rendering simple "hello world" partials, etc. and can't figure out where the problem is stemming from. Meanwhile, using the console I can very easily add elements to this same section: $('#element_id').after("

Hello, world.

)

Where else might errors be reported besides the firebug console and server terminal window? I'm stumped.

  • Chris


The solution to this problem wasn't obvious, but here it is:

$("#field_id").after("<%= escape_javascript(render :partial=>'folder/myPartial') %>");

Note that I had to place the entire ERB block inside quotes!


From experience it is good to use escape_javascript around render() method

so it could look:

page[field_type_selector].after(escape_javascript(render(:partial=>'question_builder/add_option_button_during_edit')))
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜