Javascript 如何使用每个ajax请求更新实例变量?
我在模型页面的视图上有一长段评论。我没有在页面加载时显示所有评论,而是尝试创建一个查看更多按钮,显示接下来的十条评论。该按钮向控制器发送ajax请求,然后控制器使用jquery呈现该块: _查看_more.html.erb pages\u controller.rb 查看更多 我将使用haml和咖啡脚本 呈现注释时,您会放置一个带有注释id的html5数据属性: 评论不完整Javascript 如何使用每个ajax请求更新实例变量?,javascript,jquery,ruby-on-rails,ajax,instance-variables,Javascript,Jquery,Ruby On Rails,Ajax,Instance Variables,我在模型页面的视图上有一长段评论。我没有在页面加载时显示所有评论,而是尝试创建一个查看更多按钮,显示接下来的十条评论。该按钮向控制器发送ajax请求,然后控制器使用jquery呈现该块: _查看_more.html.erb pages\u controller.rb 查看更多 我将使用haml和咖啡脚本 呈现注释时,您会放置一个带有注释id的html5数据属性: 评论不完整 #comments/_comment.html.haml %p.single-comment{:"data-comment
#comments/_comment.html.haml
%p.single-comment{:"data-commentid" => comment.id}
=comment.body
咖啡
$ ->
$("#view-more-link").on 'click', ->
last_comment_id = $("#comments-wrapper .single-comment").last().data('commentid')
page_id = $("#comments-wrapper").data("pageid")
$.ajax
url: "/comments/view_more"
dataType: "script"
data:
last_comment_id: last_comment_id
page_id: page_id
财务主任评论
def view_more
@page = Page.find(params[:pageid])
if params[:last_comment_id]
@comments = @page.comments.where("comments.id > ?", params[:last_comment_id]).limit(10)
end
respond_to do |format|
format.js
end
end
评论/查看_more.js.erb
$("#comments-wrapper").append("<%= escape_javascript(render @comments) %>");
注意:我不知道您的路由是如何设置的,因此我将page.id作为数据属性我将使用已经实现的分页gems或。我将使用will_paginate创建这个示例 首先,必须指出您的方法是不正确的,因为它会在每个视图或更多请求中加载所有注释。若你们想显示10条评论,只从数据库中选择它们是有意义的,对吗?分页宝石会帮你的 让我们来看看代码: 查看更多按钮 _查看_more.html.erb 查看_more.js.erb
$("#comments-wrapper").append("<%= escape_javascript(render @comments) %>");
在使用count.进行ajax调用之前更新隐藏变量不好吗
var currentVal = parseInt($("[type=hidden]").val());
$("[type=hidden]").val( currentVal + 1 );
在注释部分的开头添加隐藏字段,默认值为0
<input type="hidden" name="hiddenId" id="hiddenId" value="0">
希望它能帮助你如果你想要一个快速而肮脏的方法,你可以将开始号和结束号保存在一个文件夹中
但是跟踪客户端接下来需要呈现的内容将是一件正确的事情。我知道这并不能回答您的问题,但您确定您不想只跟踪客户端,并在必要时通过ajax请求发送开始索引和结束索引吗?@JMM我没有考虑过这一点。我怎么能这么做?这真的足够了吗?它似乎太简单,无法实际工作。例如,我如何选择每页返回多少条记录?@JoeMorano,您需要安装de will_paginate gem当我按下按钮时不会发生任何情况。我需要在某个地方需要一个文件才能让gem工作吗?不需要@JoeMorano。当您按下按钮时,会发出AJAX请求吗?
def view_more
@page = Page.find(params[:pageid])
if params[:last_comment_id]
@comments = @page.comments.where("comments.id > ?", params[:last_comment_id]).limit(10)
end
respond_to do |format|
format.js
end
end
$("#comments-wrapper").append("<%= escape_javascript(render @comments) %>");
<%= link_to "view more", view_more_page_path, remote: true, id: 'view-more-btn' %>
def view_more
@comments = Page.find(params[:id]).comments.paginate(page: params[:page], per_page: 10)
respond_to do |format|
format.html { redirect_to root_path }
format.js
end
end
<% @comments.each do |comment| %>
<%= comment.text %>
<% end %>
$("#comments-wrapper").append("<%= escape_javascript(render 'view_more') %>");
# We need to update the 'view more' link with the next page number
$('#view-more-btn').attr('href', '<%= view_more_page_path((params[:page] || 0) + 1) %>')
var currentVal = parseInt($("[type=hidden]").val());
$("[type=hidden]").val( currentVal + 1 );
<input type="hidden" name="hiddenId" id="hiddenId" value="0">