0

我刚刚意识到,当您movedTo在 some 上观察事件时cursor,该事件仅针对实际更改了它们在结果集中的相对位置的文档触发,而不仅仅是它的索引。例如,如果生成的文档集首先等于[1, 2, 3],然后变为[3, 1, 2],则事件将仅针对第三个文档触发,而不是所有文档。虽然从效率的角度来看这听起来很合理,但文档并不清楚(看这里):

移动到(文档,fromIndex,toIndex,之前)

一个文档改变了它在结果集中的位置,从fromIndexto toIndex (在具有 id 的文档之前before)。它的当前内容是文档。

对我来说,“改变了它在结果集中的位置,从索引到索引”听起来更像是他们三个都改变了他们的位置,所以事实上:

  • 一个从索引0到索引1,...
  • 两个从 index1到 index 2,并且...
  • 三从 index20.

我想要实现的是观察cursor并知道index每个文档的 是否发生变化。虽然我对如何实现这一点有一些粗略的想法,但我想知道是否有一种简单(最佳?)和“流星友好”的方法来解决这个问题。

4

1 回答 1

2

这种行为实际上不仅从性能的角度来看是完全合理的。这样想:

当您使用observe方法时,您希望收到集合发生的所有更改的通知(无论是在服务器上还是在 minimongo 中)。因此,您收到的每个回调都是集合修改的单个实例。当您通过将其中一个对象移动到另一个位置来更改对象的顺序时,您只更改了一次集合,因此您希望只接收此事件的一个回调。

您不想收到有关单个事件的 42 次通知!

 


 

我认为为所有移动对象增加该通知的最简单方法是在回调中手动循环它们。当一个项目从位置 A 移动到位置 B 时,您知道位于 A 和 B 之间的所有对象也已移动。因此,如果您需要调整它们中的每一个,只需在整个列表中从 A 到 B 的循环中执行此操作。

于 2013-11-08T00:35:36.100 回答