流星`movingTo`没有按预期工作

时间:2013-11-08 00:08:10

标签: collections cursor meteor observers

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

  

movingTo(document,fromIndex,toIndex,之前)

     

文档更改了结果集中的位置,从fromIndex更改为toIndex   (位于标识为before的文档之前)。它目前的内容是文件。

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

  • 一个从索引0转到索引1,...
  • 两个从索引1到索引2,以及......
  • 三个从索引20

我想要实现的是观察cursor并了解每个文档的index是否发生变化。虽然我对如何实现这一点有一些粗略的想法,但我想知道是否有一个简单的(最佳?)和#34; Meteor friendly#34;解决这个问题的方法。

1 个答案:

答案 0 :(得分:2)

这种行为实际上不仅从性能的角度来看也很有意义。想一想:

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

您不希望收到42次关于单个事件的通知!


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