使用jQuery Rails RJS - 为什么我的页面没有更新?

时间:2011-02-28 20:14:54

标签: ruby-on-rails ruby-on-rails-3 jquery

我有一个html选择元素,使用jQuery绑定javascript更改事件。发生更改时,根据所选选项,可能会发生一些不同的事件。初始调用是通过ajax进入处理逻辑的rails控制器。

这里有三件事情可以做到:

  1. 某些页面元素已停用
  2. 启用了一些页面元素
  3. 添加了其他页面元素
  4. 出于某种原因,我不能让#3工作! Firebug向我显示正确的请求和响应标头,服务器告诉我模板正在成功呈现,但屏幕上不会显示任何内容。我已经走到硬编码元素ID尝试简单的渲染,但仍然没有运气。

    这是我的RJS文件:

    # 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 << "}"`
    

    我尝试过对元素ID进行硬编码,渲染简单的“hello world”部分等等,并且无法弄清楚问题源于何处。同时,使用控制台我可以很容易地将元素添加到同一部分:$('#element_id')。after(“你好,世界。

    除了firebug控制台和服务器终端窗口之外还可能报告哪些错误?我很难过。

    • 克里斯

2 个答案:

答案 0 :(得分:2)

这个问题的解决方案并不明显,但现在是:

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

请注意,我必须将整个ERB块放在引号内!

答案 1 :(得分:0)

根据经验,最好在render()方法

周围使用escape_javascript

所以它可以看起来:

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