2012-04-21 8 views

Respuesta

99

Por lo tanto, es en realidad bastante sencillo, en un nivel básico hay 2 tipos de funciones implicadas:

  1. funciones que crean un contexto reactiva (función reactiva)

  2. funciones que invalidan un reactivo contexto (función invalidante)

  3. Funciones que pueden hacer ambas cosas. (Mentí hay 3)

Cuando se llama a un reactive function crea una context que las tiendas de meteoros a nivel mundial y para el cual el reactive function suscribe una devolución de llamada invalidation. La función que pasa a una función reactiva, o cualquier función que se ejecute desde ella, puede ser invalidating function y puede tomar el context actual y almacenarlo localmente. Estas funciones pueden entonces, en cualquier momento, como en una actualización de DB o simplemente una llamada de temporizador, invalidar ese context. El reactive function original recibiría ese evento y se evaluaría.

Aquí está un paso a paso utilizando las funciones de meteoros (tenga en cuenta que Tracker.autorun que antes se llamaba Deps.autorun):

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

Session.set("name", "Greg"); 
  1. ejecución automática toma una función como parámetro
  2. antes de la ejecución automática se ejecuta esta función, se crea a context
  3. autorun adjunta una devolución de llamada al evento de invalidación context
  4. Esta devolución de llamada se volverá a ejecutar la función pasó a autorun
  5. La función se ejecuta en el context por primera vez.
  6. tiendas Meteor este context globalmente como el actualmente activo context
  7. Dentro de la función es otra función: Session.get()
  8. Session.get() es tanto un reactive function y un invalidating function
  9. conjuntos Session.get hasta su propio context y la asocia internamente con la tecla "nombre"
  10. Session.get recupera el contexto actual (contexto de ejecución automática) a nivel mundial a partir de meteoritos
  11. la devolución de llamada invalidación que Session.get registra a i propio contexto de t, simplemente se invalidará se encierra contexto (en este caso, el contexto de la ejecución automática)
  12. Así que ahora tenemos 2 contextos, de ejecución automática y de
  13. cuando regresan estas funciones session.get, meteoro limpia la variable global contexto activo

  14. Sesión.set es otra función capaz de invalidar un context.

  15. en este caso estamos invalidando todos context s creados por sesión asociados con el "nombre" clave
  16. Todos los contexts, cuando invalidado, ejecutar sus devoluciones de llamada de invalidación.
  17. Esas devoluciones de llamada solo invalidan su encerrando context s (Eso es el diseño de Session.get y no lo que una devolución de llamada invalidación debe hacer)
  18. Aquellos que encierra contexts ahora ejecutar sus devoluciones de llamada de invalidación.
  19. En el caso de ejecución automática, esa devolución de llamada ejecuta la función que originalmente pasamos a la ejecución automática y luego configura el context nuevamente.

Toda la aplicación es en realidad bastante sencillo, así, se puede ver aquí:
https://github.com/meteor/meteor/blob/master/packages/tracker/tracker.js

Y un buen ejemplo de cómo funciona se puede encontrar aquí:
https://github.com/meteor/meteor/blob/master/packages/reactive-dict/reactive-dict.js

Programación reactiva en realidad no es meteoro o JS específico
se puede leer al respecto aquí: http://en.wikipedia.org/wiki/Reactive_programming

+0

genial gracias por esta buena explicación –

+5

Gran explicación, esto debería estar en la página meteorito. – alejandro

+1

Este video fue muy útil http://www.eventedmind.com/posts/meteor-reactivity-with-contexts – jonperl

Cuestiones relacionadas