Поскольку этот ответ был написан, Firebase добавила функцию, которая позволяет упорядочивать любой дочерний элемент или значение. Таким образом, теперь есть четыре способа заказа данных: по ключу, по значению, по приоритету или по значению любого именованного дочернего элемента. [Gg]
Основные подходы остаются неизменными, хотя:
] 1. Добавьте дочернее свойство с инвертированной меткой времени, а затем закажите это.
2. Прочитайте их в порядке возрастания, а затем инвертируйте их на клиенте.
Firebase поддерживает извлечение дочерних узлов коллекции двумя способами:
- по имени
- по приоритету
То, что вы получаете сейчас, называется по имени, что бывает хронологическим. Это не совпадение кстати: когда вы
push
элемент в коллекцию, имя создается, чтобы гарантировать, что дети упорядочены таким образом. Чтобы процитировать документацию Firebase дляpush
:Уникальное имя, сгенерированное push (), имеет префикс с меткой времени, созданной клиентом, так что результирующий список будет хронологически отсортированы.
В руководстве Firebase по упорядоченным данным есть это сказать по теме:
Как данные упорядочены
По умолчанию дети в узле Firebase сортируются лексикографически по имени. Использование
push()
может генерировать дочерние имена, которые, естественно, сортируются в хронологическом порядке, но многие приложения требуют, чтобы их данные сортировались другими способами. Firebase позволяет разработчикам указывать порядок элементов в списке, указав собственный приоритет для каждого элемента.Самый простой способ получить нужное поведение - также указать всегда убывающий приоритет, когда вы добавите элемент:
var ref = new Firebase('https://your.firebaseio.com/sell'); var item = ref.push(); item.setWithPriority(yourObject, 0 - Date.now());
Обновить
Вам также придется искать детей по-другому:
fbl.child('sell').startAt().limit(20).on('child_added', function(fbdata) { console.log(fbdata.exportVal()); })
В моем тесте с использованием
on('child_added'
гарантирует, что последние несколько детей добавлены в обратном хронологическом порядке. С другой стороны, с помощьюon('value'
возвращает их в порядке их имени.Обязательно прочитайте раздел «Чтение упорядоченных данных» , в котором объясняется использование
child_*
события для извлечения (упорядоченных) детей.Бит для демонстрации этого: http://jsbin.com/nonawe/3/watch?js,console