2012-06-24 20 views
8

¿Hay una extensión de la red troncal para los mensajes Flash? Parece ser una característica común en Web Frameworks (al menos en el lado del servidor). No parece haber ninguna, y he tratado de hacer mi propia:BackboneJS Mensajes Flash

class FlashMessenger extends Backbone.Model 

    constructor: -> 
     @messages = [] 

    # add a message to the messages array 
    add: (type, message) -> 
     @messages.push 
      type: type 
      message: message 

    # returns all existing messages and clearing all messages 
    getMessages: -> 
     ret = @messages.slice(0) 
     @messages = [] 
     return ret 

Ahora, me preguntaba cómo puedo inyectar en mis puntos de vista de forma automática. Me gustaría que mis mensajes a mostrar cuando uso Backbone.Router.navigate() por ejemplo:

app.flashMessages.add("success", "Successfully logged in") 
appRouter.navigate("dashboard") 
# flash messages should show when I render the view 

Respuesta

13

Mis 5 centavos - que parece ser un poco de una exageración de usar columna vertebral de flash. Si solo tiene 1 instancia de mensaje flash en la página, es mejor que no utilice un modelo diferente para él.

lugar me gustaría utilizar una vista para mensaje de Flash y un despachador mundial:

Dispatcher = _.extend({}, Backbone.Events); 

Crear vista:

var FlashMessage = Backbone.View.extend({ 
    initialize: function() { 
     Dispatcher.bind('show_flash_message', this.render); 
    }, 

    render: function(msg) { 
     // do something with the message 
    } 
}); 

Y de la parte de la aplicación en la que tiene que mostrar el mensaje flash , do

Dispatcher.trigger('show_flash_message', 'Some message'); 
+1

Woooaa. ¡Perfecto! Estaba buscando ese tipo de solución. +1 –

+0

¡Genial! ¿Podría explicar por qué clona 'Backbone.Events', no utiliza objetos existentes? – skalee

+0

Bueno, primero, no lo clonas, extiendes un objeto vacío con él, p. como se mencionó anteriormente o por 'var Dispatcher = Backbone.Events.extend ({});' como todos los consttructors de Backbone parecen tener el método incorporado de 'extender'. En cuanto a por qué crear otro objeto en lugar de utilizar Backbone.Events: diría que, dado que no desea alterar el marco, como norma, y ​​crear un objeto distribuido puede requerir agregar métodos personalizados posteriormente. OMI de esta manera es más limpio. –

Cuestiones relacionadas