2016-01-30 2 views
4
 var self = this; 
     var firebaseRef = new Firebase(baseUrl + '/sparks'); 

     firebaseRef.limitToLast(5).on('child_added', function(childSnapshot, prevChildKey) { 
     self.addChild(childSnapshot); // adds post to a <div> 
     }); 

database layoutВнедрение бесконечной прокрутки с помощью Firebase?

Мой код в настоящее время загружает последние 5 сообщений и загрузит новые сообщения. Тем не менее, я также хотел бы иметь возможность загружать старые сообщения. У меня есть кнопка, которая при нажатии вызывает функцию (которая я не знаю, как ее реализовать), которая загружает более старые сообщения. Как получить эти старые сообщения?

(Стрелка просто означает, что я хочу, чтобы получить сообщения, начиная с нижней и рабочие свой путь к вершине)

+0

Что такое '__firebaseKey__'? Можете ли вы настроить воспроизведение на сайте, например jsfiddle/jsbin? –

+0

@FrankvanPuffelen Я обновил свой пост. Надеюсь, что более ясно, что моя цель –

ответ

9

Вы должны думать немного назад, чтобы сделать это. Когда вы получите результаты для запроса на первую страницу, помните, первый элемент в результатах:

firebaseRef.endAt().limitToLast(5).on('child_added', function(childSnapshot, prevChildKey) { 
    self.addChild(childSnapshot); // adds post to a <div> 
    }); 

В то время как вы не можете получить доступ к дочерним элементам по индексу с Firebase, вы можете хранить ключ элемента и использование, для запуска следующего запроса.

var firstKnownKey; 
firebaseRef.orderByKey().limitToLast(5).on('child_added', function(childSnapshot, prevChildKey) { 
    if (!firstKnownKey) { 
     firstKnownKey = childSnapshot.key; 
    } 
    self.addChild(childSnapshot); // adds post to a <div> 
}); 

Теперь у вас есть переменная firstKnownKey, которая имеет первый ключ, который вы когда-либо видели. Для того, чтобы получить предыдущую партию детей, вы передаете это значение в к endAt(), когда вы запустите ваш следующий запрос:

firebaseRef.orderByKey().endAt(firstKnownKey).limitToLast(5).on('child_added', function(childSnapshot, prevChildKey) { 
    if (!firstKnownKey) { 
     firstKnownKey = childSnapshot.key; 
    } 
    self.addChild(childSnapshot); // adds post to a <div> 
}); 

Ответы на подобные вопросы за последние несколько дней:

+0

Спасибо, это было именно то, что мне нужно. Мои проблемы не использовали orderByKey(), используя startAt вместо EndAt и limitToFirst вместо limitToLast! –

+0

@Frank, ваш третий кусок кода будет возвращаться каждый раз при одном и том же результате, потому что 'firstKnownKey' будет таким же, как когда мы получим первую партию. – Silviu

+0

Вам нужно будет обновить 'firstKnownKey' для каждой загружаемой вами страницы. –

Смежные вопросы