【问题标题】:Render a partial in rails using jquery使用 jquery 在 Rails 中渲染部分内容
【发布时间】:2011-10-17 14:20:01
【问题描述】:

我正在尝试在我的主页上设置一个导航栏,当用户单击链接时,该导航栏将部分内容加载到 div 元素中。我已经按照这篇文章中的步骤进行了修改,并根据我的需要进行了修改: Rails 3 - link_to to call partial using jquery ajax

我的代码:

views/pages/home.html.erb:

<%= link_to "Files", :action => 'load_upload_partial', :remote => true %>

。 . .

<div id="main_frame"></div>

pages_controller:

def load_upload_partial  
    respond_to do | format |  
      format.js {render :layout => false}  
    end
end

/views/uploads/load_upload_partial.js.erb:

$("#main_frame").html( "<%= escape_javascript( render( :partial => "/upload/upload_form" ) %>" );

这个例子中的部分只是一个表格。当我点击链接时,我得到一个空白页面,这是地址栏: http://localhost:3000/load_upload_partial?remote=true

这让我觉得链接没有触发 ajax GET 请求(如果这是正确的术语)。如果是这种情况,我需要将任何内容添加到我的 application.js 文件中吗?我在 rails 和 jquery 上关注了 railscast #136,但无法弄清楚 application.js 代码的哪些位适用于我的案例。 任何想法都非常感谢。谢谢。汤姆

【问题讨论】:

  • 您使用的是什么版本的 Rails?我不能说为什么,但问题是 Rails 在 url_options 参数中包含 :remote =&gt; true link_to
  • 3.0.7.无法解决此版本的 link_to 选项,因此感谢您的帮助。

标签: ruby-on-rails ajax jquery


【解决方案1】:

我现在倾向于避免像您打算那样使用 RJS。我更喜欢使用把手等工具创建 js 模板。

我只使用 ajax 来获取原始数据,然后重新创建部分客户端。这对于服务器负载和数据传输来说要好得多。

【讨论】:

    【解决方案2】:

    我认为您必须将您的 link_to 更改为:

    <%= link_to "Files", {:action => 'load_upload_partial' }, remote => true %>
    

    问题与link_to的方法签名有关。

    【讨论】:

    • 感谢您的回复。我将 link_to 行更改为包含 { :remote => true } 但它在加载页面时导致异常:/app/views/pages/home.html.erb:8: syntax error, unexpected ')', expecting tASSOC 。 ..partial', { :remote => true } );@output_buffer.safe_concat(' 我正在使用 Rails 3.0.7 是否有任何改变?
    • 对不起,我很快就回复了。我编辑了我的回复并尝试了它。它现在应该可以工作了:)
    • 感谢您的回复。它仍然无法正常工作 - 链接已“死”,但我现在正在发送文本/javascript,这是进步。我收到 500 内部服务器错误,所以我猜我的 js.erb 文件一定不正确。将有一个适当的根源。感谢您的帮助。
    【解决方案3】:

    遇到了同样的问题 - 提示在生成的格式错误的 html 中 - 查看代码生成的标记的 href 属性的值。我敢打赌它看起来很时髦。这是正确的代码:

        <%= link_to "Files", your_path, action: 'load_upload_partial', remote: true %>
    

    【讨论】:

      【解决方案4】:

      您是否尝试过使用 .load() 而不是 .html()?

      另外,请尝试改用此行:

      $("#main_frame").html( "<%= escape_javascript( render( :partial => '/upload/upload_form' ) %>" );
      

      【讨论】:

      • downvotes 应该需要解释......否则我不知道我的建议有什么问题。
      猜你喜欢
      • 1970-01-01
      • 2015-04-15
      • 2020-04-01
      • 2015-11-28
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2011-09-14
      相关资源
      最近更新 更多