【问题标题】:confusion using rjs for a link_to_remote将 rjs 用于 link_to_remote 的混淆
【发布时间】:2011-01-01 00:06:48
【问题描述】:

我的应用程序布局包含一个导航 div 和一个构造为部分的内容 div。我想使用 ajax,这样每当有人单击导航 div 中的链接时,该页面的内容就会在内容 div 中呈现而无需刷新。我对如何正确地做到这一点感到困惑......对rails noob有什么帮助吗???先谢谢了~

application.html.erb

<body>
  <div id="container">
    <%= render 'layouts/header' %>
    <%= render 'layouts/content'%>
    <%= render 'layouts/footer' %>
  </div>
</body>

_header.html.erb

<%= link_to_remote "Home", :url => { :controller => "pages", :action => "home" } %>

_content.html.erb

<div id="content">
  <%= yield %>
</div>

pages_controller.rb

def home
  @title = "Home"
  respond_to do |format|
    format.js
  end
end

home.rjs

page.replace_html :container, :partial => 'layouts/content'

【问题讨论】:

  • 仅供参考:link_to_remote 是 Rails 2 执行此操作的方式。从 Rails 3 开始,使用 link_to ..., :remote =&gt; true。关于您的问题:使用 Firefox 的 firebug 插件并激活控制台。在那里您可以跟踪您的 Ajax 请求。如果控制器端出现错误,则包含在响应中。
  • duddle 这是非常有帮助的,我今天试图找出这一点。

标签: ruby-on-rails ajax rjs link-to-remote


【解决方案1】:

尝试将“home.rjs”重命名为“home.js.rjs”。其他一切看起来都是正确的。你遇到了什么错误?

【讨论】:

  • 嗨,感谢您的回复,我得到的错误是:尝试 { Element.update("container", "
    \n \n \n
    \n"); } catch (e) { alert('RJS 错误:\n\n' + e.toString()); alert('Element.update(\"container\", \"
    \\n \\n \\n
    \\n\");' );抛出 e }
【解决方案2】:

试试:

pages_controller.rb

def home
  @title = "Home"
  respond_to do |format|
    format.js {
      render(:update) do |page|
        page.replace 'content', :partial => 'layouts/content'      
      end
    }
  end
end 

您不需要额外的 rjs 文件。另外仅供参考,如果您要将@title 保存到数据库,那么您需要在 respond_to 之前执行@title.reload 以获取最新数据。上面关于萤火虫的评论很有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 2010-12-25
    • 2018-01-25
    相关资源
    最近更新 更多