【问题标题】:Meteor `movedTo` does not work as expected流星`movedTo`没有按预期工作
【发布时间】:2013-11-19 21:17:08
【问题描述】:

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

movedTo(document, fromIndex, toIndex, before)

一个文档改变了它在结果集中的位置,从fromIndextoIndex (在 ID 为 before 的文档之前)。它当前的内容是文档。

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

  • 从索引0 到索引1,...
  • 两个从索引1 到索引2,然后...
  • 三个从索引20

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

【问题讨论】:

    标签: collections cursor meteor observers


    【解决方案1】:

    这种行为实际上非常合理,不仅从性能角度来看。这么想:

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

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

     


     

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

    【讨论】:

    猜你喜欢
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2020-03-18
    • 2012-06-14
    • 2014-11-15
    • 1970-01-01
    • 2012-07-02
    相关资源
    最近更新 更多