d3.js: инкрементный переход

Поскольку этот ответ был написан, 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

1
задан Jake 13 July 2018 в 13:51
поделиться

1 ответ

Вот несколько проблем, которые я мог видеть с вашим кодом:

  • При нажатии кнопки «# update1» вы добавляете ссылки [7, 8], поэтому их необходимо изменить на добавив число, которое на +1 больше, чем последняя «ссылка», которая была нажата, а другая - на +2.
  • Когда вы вызываете свою функцию «update», вы работаете на более крупном массиве но по-прежнему позиционируют их на основе их индекса с параметром «counter» в вызове функции для установки атрибута «x» объектов «rect» и «text», которые вы создаете.

Я думаю, что добавил функциональность, которую вы хотели, вот код: https://codepen.io/anon/pen/MBaoxb?editors=0011

Изменения, которые я сделал, следующие:

Изменено так, что новые добавляемые ссылки могут увеличиваться на основе последнего числа, введенного в массив.

**Line 33:** var update1 = [links[links.length-1] + 1, links[links.length-1] + 2];

Удалены первые 2 ссылки из массива (так что позиция может быть установлена ​​из индекса, так как в настоящее время настроен код в функции «update»).

**Line 56:**     links = links.splice(2, links.length);
1
ответ дан REEE 17 August 2018 в 12:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: