2012-06-24 12 views
8

Czy istnieje rozszerzenie do szkieletu wiadomości Flash? Wydaje się, że jest to typowa cecha w Frameworkach WWW (przynajmniej po stronie serwera). Wydaje się, że nikt, a ja usiłowałem zrobić własny:Wiadomości Flash BackboneJS

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 

Teraz, zastanawiałem się, w jaki sposób można automatycznie wprowadzić je do moich poglądów. Ja lubię moje wiadomości, aby pokazać, kiedy używać Backbone.Router.navigate() np

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

Odpowiedz

13

Moi 5 centów - wydaje się być trochę overkill używać Backbone wiadomości flash. Jeśli masz tylko jedno wystąpienie wiadomości flash na stronie, lepiej nie używać oddzielnego modelu.

Zamiast użyłbym widok dla wiadomości Flash i globalną wysyłający:

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

Utwórz widok:

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

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

I od tej części aplikacji, gdzie trzeba pokazać wiadomość bezpośrednią , do

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

Woooaa. Idealny! Szukałem tego rodzaju rozwiązania. +1 –

+0

Świetnie! Czy możesz wyjaśnić, dlaczego klonujesz 'Backbone.Events', a nie używasz istniejącego obiektu? – skalee

+0

Po pierwsze, nie klonuj go, nie usuwaj z niego pustego obiektu, np. jak wspomniano powyżej lub przez 'var Dispatcher = Backbone.Events.extend ({});' ponieważ wszystkie konstruktory szkieletu wydają się mieć wbudowaną metodę 'extend'. Co do tego, dlaczego utworzyć inny obiekt zamiast używać Backbone.Events - powiedziałbym, ponieważ nie chcesz zmieniać struktury, z reguły i tworzenie obiektu Dispatched może później wymagać dodania niestandardowych metod. IMO w ten sposób jest po prostu czystsze. –

Powiązane problemy