javascript - Rails 渲染仅加载部分内容

标签 javascript jquery ruby-on-rails

我想在单击链接后重新加载页面的一部分。假设我想实现一个点击计数器。这就是我所做的。

show.html.erb

<div id="downloads"><%= render(partial:'downloads', locals: {user: @user}) %></div>

_downloads.html.erb

<% user.attachments.each do |attachment| %>
  <%= attachment['download_count'] %>
    <br>
  <%= link_to 'download', {controller: 'files', action: 'download', attachment: attachment, user: user}%>
<% end %>

show.js.erb

$("#downloads").html("<%= escape_javascript(render('downloads', locals: {user: params[:user]})) %>")

files_controller.rb

def download
  user = User.find(params[:user])
  # increasing attachment's dl count
  # ...
  render(:partial => 'users/downloads', locals: {user: user}, :layout => false)
end

结果它将整个页面替换为部分页面。怎么了?

编辑一个

已添加remote: true到 link_to 正如 Anchor 所说。

<%= link_to 'download', {controller: 'files', action: 'download', attachment: attachment, user: user}, remote: true %>

files_controller.rb

替换render(:partial => 'users/downloads', locals: {user: user}, :layout => false)

respond_to do |format|
  format.js {  render(:partial => 'users/downloads', locals: {user: user}, :layout => false)}
end

现在尝试单击链接:我的页面没有任何反应。虽然在控制台中:

Processing by FilesController#download as JS Parameters: {"attachment"=>{"download_count"=>"175", "filename"=>"filename.doc", "id"=>"2fd9adbf6172740d46060000", "type"=>"appli"}, "user"=>"7fbceaa661727417f55e0000"} Rendered users/_downloads.html.erb (60.7ms) Completed 200 OK in 106ms (Views: 63.1ms)

我认为我现在面临着 javascript 问题。

最佳答案

看起来您的 Controller 正在返回 HTML 响应而不是脚本响应。尝试在 link_to 中添加参数 :remote => true:

<%= link_to 'download', {controller: 'files', action: 'download', attachment: attachment, user: user}, :remote => true %>

并确保您的 Controller 在响应 block 中有相应的format.js

关于javascript - Rails 渲染仅加载部分内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19474619/

相关文章:

javascript - 按下键码不返回预期的字符串值

ruby-on-rails - Action Cable 和 AngularJS 跨域集成

ruby-on-rails - Rails 4 中的虚拟属性

ruby-on-rails - 如何向数组中的每个记录/对象添加属性/属性? rails

javascript - 如何文本扭曲 "bulge/fisheye"效果?

javascript - jQuery Mobile 导致 CSS3 动画在面板显示中重新触发

Javascript 点击多个链接

javascript - 如何检查 id 值是否已经存在于对象数组中?

javascript - window.open 有时无法打开弹出窗口吗?

javascript - 添加加载后调整 iframe 的大小