CODE:
<script>
var app = angular.module('app', ['firebase']);
app.controller('ctrl', function ($scope, $firebaseArray, $timeout) {
console.log(<%=lastID%>);
$scope.data = [];
var _n = Math.ceil(($(window).height() - 50) / (350)) + 1;
var _start = <%= lastID %>;
var _end = <%= lastID %> + _n - 1;
$scope.getDataset = function() {
fb.orderByChild('id').startAt(_start).endAt(_end).limitToLast(_n).on("child_added", function(dataSnapshot) {
$scope.data.push(dataSnapshot.val());
$scope.$apply()
console.log("THE VALUE:"+$scope.data);
});
_start = _start + _n;
_end = _end + _n;
};
$scope.getDataset();
window.addEventListener('scroll', function() {
if (window.scrollY === document.body.scrollHeight - window.innerHeight) {
$scope.$apply($scope.getDataset());
}
});
});
// Compile the whole <body> with the angular module named "app"
angular.bootstrap(document.body, ['app']);
</script>
现状:
lastID是最后创建的帖子的ID。它们向后(从-1到lastID)。
除删除某些帖子外,此解决方案非常有效。
(帖子从最新到最旧(从lastID到-1)排序)。
例如,如果有16个帖子,则lastID = -16。
如果我删除帖子-13至-5,然后删除帖子-3,则lastID保持为-16。
这意味着在加载页面时,在加载3个第一篇文章(-16至-14)之后,没有文章出现,而我需要反复向下滚动才能显示-4。
问题:
如何确定如果删除了某些帖子,我的Infinite Scroll脚本将跳过不存在的帖子的ID,而仅加载最近的3个帖子?
我检查过的内容:
我看着这个:
Display posts in descending posted order
但是我不确定如何在无限滚动中实现这些解决方案。有任何想法吗 ?
最佳答案
如果我对您的理解正确,则不必使用end。这可以使用startAt + limit来实现
fb.orderByChild('id').startAt(_start).limit(n)...
并使用布局对降序的项目进行排序。使用此方法,如果ID是连续的,则不必担心ID的顺序
更新
您可以更简单地完成此操作。只需以新的值(value)更新您的开始
fb.orderByChild('id').startAt(_start).limit(_n).on("child_added", function(dataSnapshot) {
$scope.data.push(dataSnapshot.val());
$scope.$apply()
_start = dataSnapshot.child('id').val()
console.log("THE VALUE:"+$scope.data);
});
在这种情况下,您的
_start
将始终保留最后一个ID,并且您不必担心已删除的元素。或者,您可以使用一个临时变量来存储最后的id值,并在
startAt
中使用它