2012-04-18 15 views
9

Próbuję wyświetlić alert dla użytkownika, gdy dane zostaną dodane do bazy danych. Więc napisałem (po stronie klienta):zachowanie cursor.observe ({added}) w Meteoru

Meteor.autosubscribe(function() { 
    ItemCollection.find().observe({ 
    added: function(item) { 
     // Alert code 
    } 
    }); 
}); 

I okazało się, że nie tylko alarmy są wyświetlane, gdy nowy element jest dodawany do bazy danych po stronie serwera (który jak sądzę jest normalne :)), ale wpisami są również wyświetlane dla każdego wcześniej dodanego elementu, gdy odświeżam stronę. Przypuszczam, że Meteor pobiera wszystkie dane z bazy danych Mongo podczas uruchamiania (aby wypełnić lokalną bazę Minimongo DB), a następnie uruchamia "dodane" zdarzenie dla każdego elementu dodanego w lokalnej bazie danych.

Ale czy to normalne zachowanie? Jak mogę odbierać tylko te pozycje, które są "naprawdę" dodane w bazie danych na serwerze?

Odpowiedz

13

Obserwujesz kursor dla bazy danych po stronie klienta i ta baza danych może nie zakończyć synchronizacji do momentu zakończenia ładowania strony, więc to zachowanie ma sens. Możesz chcieć wyraźnie zasubskrybować kolekcję, jak to omówiono w odpowiedzi na this question.

Jeśli Twoje dane zawierały pole created_at, możesz obserwować elementy utworzone po wczytaniu strony.

ItemCollection.find({created_at : {$gt: some_current_time}}).observe({ 
    added: function(item) { 
     // Alert code 
    } 
    }); 
+0

Dziękuję za pomoc, to jest to, czego potrzebowałem! Spróbuję tego! – TiuSh

+0

Awesome! Bardzo się cieszę, że to pomogło. – lashleigh

+0

Zobacz także odpowiedź na to pytanie: http://stackoverflow.com/questions/21355802/meteor-observe-changes-added-callback-on-server-fires-on-all-item –

Powiązane problemy