2011-08-24 15 views
16

Estoy tratando de encontrar una buena manera de tener vistas y controladores y minimizar los vínculos entre ellos.Eventos de Javascript vs. Devolución de llamada En MVC Scenario

Aparte de múltiples abonados a un evento, ¿hay alguna diferencia importante entre el código js así:

var customers = { 
    get: function(callback) { 
     $.get('/customers', {}, function(data) { 
      callback.call(this, data); 
     }); 
    } 
}; 

y un enfoque orientado a eventos como este (objeto de evento se acaba de pseudo código):

var customers = { 
    get: function() { 
     $j.get('/customers', {}, function(data) { 
      event.publish('customers.loaded', data); 
     }); 
    } 
}; 

En ambos casos, el consumidor del objeto del cliente ignora su funcionamiento interno. ¿Una forma tiene una ventaja sobre la otra?

Respuesta

8

de son devoluciones de llamada, pero la diferencia es cuando y donde ellos están obligados Evento. En el primer caso, debe tener una referencia a la devolución de llamada en el momento en que se llama al get, adicionalmente está limitado a una devolución de llamada simple.

En el segundo escenario, (suponiendo que esté activando un evento con ese pseudo-código) podría haber enlazado una devolución de llamada fuera del alcance de donde se llama get, lo que permite una encapsulación de datos más sólida. Además, los eventos admiten la activación de múltiples devoluciones de llamada, de modo que se pueden ejecutar diferentes funciones según lo que haya tenido acceso al objeto customers.

Recomiendo ir con la solución orientada a eventos ya que JavaScript es un lenguaje orientado a eventos.

4

La respuesta es bastante sencillo: dado que un evento puede tener controladores de eventos ilimitadas (que son nada más que las devoluciones de llamada) ... y una devolución de llamada es sólo una única de devolución de llamada, le sugiero que vaya hacia el método de programación impulsado por evento.

4

Me gustaría ir a la solución de devolución de llamada whenm hacer un módulo. Esto tiene una dependencia menos: la dependencia de su objeto de evento.

Si descargo un complemento de terceros, digamos el que podría estar trabajando en este momento, me gustaría tener el control de lo que se llama cuando la función se termina ejecutando y criando mi propio evento usando mi propia opción de bus de eventos.

Si no está haciendo un módulo, creo que ambas soluciones tienen su encanto. :)

Cuestiones relacionadas