Recientemente estoy evaluando un marco de JavaScript para usar en nuestro próximo proyecto. Realmente me gusta Ember. Pero en nuestra aplicación, necesitaríamos un mecanismo de evento de la capa de datos para notificar a la capa del controlador que algo ha cambiado. Sé que se podría utilizar en obersevers Ember, por ejemplo ,:¿Admite EmberJs el patrón de evento de publicación/suscriptor?
person.addObserver('fullName', function() {
// deal with the change
});
pero me gusta más en Backbone.Events que se puede suscribir o publicar un evento, específicamente:
var object = {};
_.extend(object, Backbone.Events);
object.on("alert", function(msg) {
alert("Triggered " + msg);
});
object.trigger("alert", "an event");
Alguien tiene una idea si eso es factible en EmberJS?
Para también darle algunos antecedentes sobre mi pregunta, nuestra aplicación es una aplicación en tiempo real. Entonces, de vez en cuando, el servicio RESTful back-end activará un evento en el lado del cliente (lado JavaScript). Me gustaría tener una capa de datos que encapsule el acceso al servicio RESTful back-end, pero también mantenga un caché. Espero que EmberJS.Data pueda ayudarme con eso (esa es una pregunta aparte, quiero encontrar respuestas). Con eso, me gustaría también que la memoria caché se actualice cada vez que ocurra un cambio desde el back-end del servicio RESTful. Una vez que el objeto de caché se haya actualizado, me gustaría que se notifique la capa de Controlador. Esto es básicamente por qué necesito algún mecanismo de evento en el lado de JavaScript.
Tenga en cuenta que la razón por la que no quiero utilizar los observadores es que, a veces, un evento puede significar que debo realizar una acción, es decir, cargar un mensaje o indicar que se está recibiendo una llamada de voz. La forma de la red troncal me parece más natural.
Gracias
¿cómo iba a darse de baja de un evento mediante su solución? – Parzifal
@Parzifal, agregue un método para "cancelar suscripción" similar a "suscribirse" que llama a http://emberjs.com/api/classes/Ember.Evented.html#method_off en lugar de "on". Puede usarlo como 'App.Hub.unsubscribe ('test-started')'. – digitalbreed