Вопрос

Я только что понял, что когда вы наблюдаете movedTo событие на некоторых cursor, событие запускается только для документов, которые фактически изменили их родственник позиция в полученном наборе, так что не только его индекс. Например, если полученный набор документов сначала равен [1, 2, 3], а затем это меняется на [3, 1, 2], Событие будет вызвано только для третьего документа, а не всех из них. Хотя это звучит разумно с точки зрения эффективности, документация совсем не ясна (посмотрите здесь):

Перенос (Document, FromIndex, ToIndex, до)

Документ изменил свою позицию в результате набора, из fromIndex к toIndex(который находится перед документом с удостоверением личности before) Его текущее содержание - документ.

Для меня, «изменил свою позицию в полученном наборе, от индекса на индекс» больше похоже на все три из них, так что на самом деле: фактически:

  • один идет из индекса 0 Индекс 1, ...
  • Два уходят от индекса 1 Индекс 2, а также ...
  • Три уходят от индекса 2 к 0.

Чего я хочу достичь cursor и знать, есть ли index каждого документа меняется или нет. Хотя у меня есть грубая идея, как это реализовать, мне интересно, есть ли простой (оптимальный (оптимальный?) И «Meteor Friendse», чтобы решить эту проблему.

Это было полезно?

Решение

Такое поведение на самом деле имеет смысл не только с точки зрения производительности. Подумайте об этом так:

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

Вы не хотите быть уведомленным 42 раза об одном событии!

 


 

Я думаю, что самый простой способ умножить, что уведомление о всех перемещенных объектах - это зацикливаться на них вручную в рамках обратного вызова. Когда предмет перемещается из позиции А в позицию B, вы знаете, что все объекты, которые были между A и B, также были сдвинуты. Поэтому, если вам нужно настроить каждый из них, просто сделайте это в цикле, который переходит от A к B за весь список.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top