Pergunta

Acabei de perceber que quando você observa o movedTo evento em alguns cursor, o evento é acionado apenas para documentos que realmente mudaram de relativo Posição no conjunto resultante, portanto, não apenas seu índice. Por exemplo, se o conjunto resultante de documentos forem iguais a [1, 2, 3], e então muda para [3, 1, 2], o evento será acionado apenas para o terceiro documento, não para todos eles. Embora pareça razoável do ponto de vista da eficiência, a documentação não é de todo clara (olhe aqui):

Movento (documento, Fromindex, ToIndex, antes)

Um documento mudou sua posição no conjunto de resultados, de fromIndex para toIndex(que é antes do documento com ID before). Seu conteúdo atual é o documento.

Para mim, "mudou sua posição no conjunto resultante, do índice para o índice", parece mais que os três mudaram de posição, então, de fato:

  • um vai do índice 0 para indexar 1, ...
  • Dois vão do índice 1 para indexar 2, e ...
  • Três vão do índice 2 para 0.

O que eu quero alcançar é observar um cursor e saber se o index de cada documento muda ou não. Embora eu tenha uma idéia difícil de como implementar isso, estou me perguntando se existe uma maneira simples (ideal?) E "amigável para meteoros" de resolver esse problema.

Foi útil?

Solução

Esse comportamento realmente faz todo o sentido não apenas do ponto de vista do desempenho. Pense assim:

Quando você usa observe método, você deseja ser notificado de todas as mudanças que acontecem com o coleção (seja no servidor ou no minimongo). Portanto, cada um dos retornos de chamada que você recebe é uma única instância de modificação do coleção. Quando você muda a ordem dos objetos movendo um deles para outro lugar, você muda a coleção uma vez, Então você deseja receber apenas um retorno de chamada para este evento.

Você não quer ser notificado 42 vezes sobre um único evento!

 


 

Eu acho que a maneira mais fácil de multiplicar essa notificação para todos os objetos movidos é atravessar -os manualmente dentro do retorno de chamada. Quando um item se move da posição A para a posição B, você sabe que todos os objetos entre A e B também foram deslocados. Portanto, se você precisar ajustar cada um deles, basta fazer isso em loop que passa de A a B por toda a lista.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top