我的问题来自导航链接/无休止的滚动.
我已经包括了一个“删除”按钮,为每个微信。当按下该按钮时,将对服务器进行ajax调用,删除微博,并从DOM中删除div。
比方说我第一页上有1到10条微博,第二页有11到20条,比如我删除了第一页的第1、2和3项。那就滚动唐顿。服务器将“重新计算”微信;由于我删除了前一个列表中的3个,它将返回项目13至22。换句话说,微博10、11和12不会出现在第一页或第二页。
在堆栈溢出搜索之后,我找到了一个解决方案:
每当我从列表中删除一个微博时,我就会在页面上的最后一个微博之后加载微博,并将其插入页面底部。
当前如何处理修复程序:
默认情况下,我使用will_paginate gem在页面上显示10条微博。我需要知道在任何时间显示的任何微信的id。为此,我将其存储在容纳每个微信的容器的开头div标记中:
<% @microposts.each do |m| %>
<div class="postHolder" data-micropost-id="<%= m.id %>">--我在microposts.js资产文件中这样访问它:
$(function() {
$('.message_delete').on('ajax:success', function(event, data, status, xhr){
console.log(data); //to check if json is working
console.log($('.postHolder').last().data('micropost-id'));
});
});这里是我的控制器销毁操作:
def destroy
micropost = Micropost.find(params[:id])
respond_to do |format|
micropost.destroy
format.json { render :json => micropost } #just to check if json is working
end
end现在我知道了每个微博的ID,所以当一个帖子被删除时,我使用一个jquery选择器来细化页面上的最后一个.postHolder div,获取ID,然后使用这个ID来获取它后面的微博,然后在它后面插入那个微博。这样,当消息被删除时,就会自动追加消息。
如果用户碰巧滚动以加载更多的消息,则不会丢失任何消息。我看过一些铁路,并看到Ryan使用数据属性做了类似的事情,并阅读了一些关于这些属性的内容,并且似乎得到了这样的印象--这是一种糟糕的做法。
我试着想出其他的方法来做这件事,但是除了这样做我什么都想不出来,感觉有点奇怪。也许这一切都在我的脑海里,但如果可能的话,我想要另一个更好的解决方案。
谢谢
亲切的问候
发布于 2012-05-23 09:26:10
您可以使用一个变量来跟踪当前页面上的微博数量。无论何时删除post,都要减少此变量。每当您获取新的posts页面时,请将此变量重置为默认值(为10)。
当您获取一个新的10个帖子时,数据库的偏移量将是(假设您的请求第3页的微博,并且您已经删除了第2页4)。
(3 * 10) - (4) == 26第3页上的第一个微型邮件现在将是微型邮件id 26。
假设我已经理解了你的问题,那就是!
https://stackoverflow.com/questions/10709294
复制相似问题