2013-11-08 4 views
0

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

movedTo (документ, fromIndex, toIndex, раньше)

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

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

  • один выходит из индекса 0 в индекс 1 ...
  • два идет от индекса 1 индексировать 2 и ...
  • три идет из индекса 2 в 0.

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

ответ

2

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

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

Вы не хотите, чтобы нас проконсультировали 42 раз (а) о одном мероприятии!

 


 

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

+0

Я полностью согласен ...но я все еще считаю, что документация здесь немного вводит в заблуждение:/ –

+0

[Это не должно быть проблемой - продолжайте! :)] (Https://github.com/meteor/meteor/blob/devel/docs/client/api.html#L1079) –

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

  • Нет связанных вопросов^_^