2012-04-21 18 views

Odpowiedz

99

Więc to jest rzeczywiście dość prosto do przodu, na poziomie podstawowym są 2 rodzaje funkcji zaangażowane:

  1. Funkcje tworzące reaktywny kontekst (funkcyjne reaktywne)

  2. Funkcje, które unieważniają reaktywny kontekst (funkcja unieważniająca)

  3. Funkcje, które mogą wykonywać obie te funkcje. (I kłamał istnieją 3)

Kiedy zadzwonisz reactive function to tworzy context że sklepy meteorów na całym świecie i do którego reactive function zgadza się invalidation zwrotnego. Funkcja, którą można przekazać do funkcji reaktywnej lub jakiejkolwiek funkcji, która działa z jej wnętrza, może być invalidating function i może pobrać bieżący numer context i przechowywać go lokalnie. Te funkcje mogą w dowolnym momencie, na przykład aktualizować bazę danych lub po prostu wywołanie czasowe, unieważnić tę wartość. Oryginał reactive function będzie wtedy odbierać to zdarzenie i ponownie się oszacować.

Oto krok po kroku przy użyciu funkcji meteorów (zauważ, że Tracker.autorun zwykło się nazywać Deps.autorun):

Tracker.autorun(function(){ 
    alert("Hello " + Session.get("name")); 
}); 

Session.set("name", "Greg"); 
  1. autorun wykonuje funkcję jako parametr
  2. przed autorun uruchamia tę funkcję, tworzy a: context
  3. autorun dołącza wywołanie zwrotne do zdarzenia unieważnienia context
  4. To wywołanie zwrotne zostanie ponownie uruchomione funkcja przeszła do automatycznego uruchomienia
  5. Funkcja jest następnie uruchamiana po raz pierwszy w context.
  6. Meteor przechowuje te context globalnie jako aktywnego context
  7. wewnątrz funkcji jest inna funkcja: Session.get()
  8. Session.get() jest zarówno reactive function i an invalidating function
  9. zestawy Session.get w górę swój własny context i współpracownicy to wewnętrznie z kluczem „nazwa”
  10. Session.get pobiera bieżący kontekst (kontekstowe) Autorun jest globalnie od meteor
  11. unieważnienie zwrotnej że Session.get rejestrów i własny kontekst T, po prostu unieważnić to załączając kontekstu (w tym przypadku kontekst Autorun za)
  12. Więc teraz mamy 2 kontekstach autorun-tych i session.get na
  13. po powrocie te funkcje, meteor czyści zmienną globalną aktywny kontekstowe

  14. Sesja.set to kolejna funkcja zdolna do unieważnienia context.

  15. w tym przypadku mamy do unieważnienia wszystkich context Utworzono przez Sesji związane z kluczowym „name”
  16. wszystkich tych contexts, kiedy unieważnione, prowadzą swoje callbacków unieważnienie.
  17. te wywołania zwrotne po prostu unieważnić ich załączając context s (to konstrukcja Session.get a nie to, co trzeba zrobić, unieważnianie callback)
  18. Ci załączając contexts teraz uruchomić swoje callbacków unieważnienie.
  19. W przypadku autorunu to wywołanie zwrotne uruchamia funkcję, którą pierwotnie przekazaliśmy do autorun, a następnie ponownie ustawia context.

Cała realizacja jest rzeczywiście dość prosta, jak również można go zobaczyć tutaj:
https://github.com/meteor/meteor/blob/master/packages/tracker/tracker.js

i dobry przykład, jak to działa można znaleźć tutaj:
https://github.com/meteor/meteor/blob/master/packages/reactive-dict/reactive-dict.js

Programowanie reaktywne w rzeczywistości nie jest oparte na meteorach lub JS
możesz przeczytać o tym tutaj: http://en.wikipedia.org/wiki/Reactive_programming

+0

fajne dzięki za to dobre wyjaśnienie –

+5

Świetne wyjaśnienie to powinno być na stronie meteorów. – alejandro

+1

Ten film wideo był bardzo pomocny http://www.eventedmind.com/posts/meteor-reactivity-with-contexts – jonperl

Powiązane problemy