質問

私はあなたが観察するときにそれを認識しました movedTo いくつかのイベント cursor, 、イベントは、実際に変更されたドキュメントのためにのみトリガーされます 相対的 結果のセットに位置するため、インデックスだけではありません。たとえば、結果のドキュメントのセットが最初に等しい場合 [1, 2, 3], 、そしてそれはに変わります [3, 1, 2], 、イベントは、すべてではなく、3番目のドキュメントに対してのみトリガーされます。効率の観点からは合理的に聞こえますが、ドキュメントはまったく明確ではありません(見てください ここ):

移動(document、fromindex、toindex、before)

ドキュメントが結果セットの位置を変更しました。 fromIndextoIndex(これはIDを使用したドキュメントの前です before)。現在の内容はドキュメントです。

私にとって、「結果のセットからの位置を変更しました。インデックスからインデックスまで」3つすべてが自分の位置を変えたように聞こえるので、実際には次のとおりです。

  • 1つはインデックスから移動します 0 インデックスを付けます 1, ...
  • 2つはインデックスから移動します 1 インデックスを付けます 2, 、 と ...
  • 3つはインデックスから移動します 20.

私が達成したいのは、aを観察することです cursor そして、 index 各ドキュメントの変更かどうか。これを実装する方法は大まかなアイデアを持っていますが、この問題を解決するための単純な(最適な」方法と「流星に優しい」方法があるのではないかと思っています。

役に立ちましたか?

解決

この動作は、実際には、パフォーマンスの観点からだけでなく、完全に理にかなっています。そのように考えてください:

使用するとき observe 方法、あなたはに発生するすべての変更を通知したい コレクション (サーバー上であろうとMinimongoで)。したがって、受信するコールバックのそれぞれは、 コレクション。 オブジェクトの1つを別の場所に移動することでオブジェクトの順序を変更すると、コレクションを変更します 一度、 したがって、このイベントのコールバックを1つだけ受け取りたいと思います。

1つのイベントについて42回通知されたくありません!

 


 

すべての移動するオブジェクトの通知がコールバック内で手動でループをループすることだと思います。アイテムが位置Aから位置Bに移動すると、AとBの間にあったすべてのオブジェクトもシフトされていることがわかります。したがって、それらのそれぞれを調整する必要がある場合は、リスト全体にわたってAからBに移動するループでこれを行うだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top