2012-06-24 119 views
8

Flash消息的骨幹是否存在擴展?它似乎是Web框架(服務器端至少)的一個常見功能。似乎沒有,我試圖做我自己的:BackboneJS 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 

現在,我想知道如何將它們自動注入到我的意見。我會想我的消息顯示,當我使用Backbone.Router.navigate()如:

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

回答

13

我5毛錢 - 這似乎是有點矯枉過正的使用骨幹閃光燈消息。如果您在頁面上只有1個Flash消息實例,則最好不要使用單獨的模型。

相反,我會用閃光燈消息的視圖和一個全局調度:

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

創建視圖:

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

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

而且從那裏,你必須顯示提示信息的應用程序的一部分,做

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

Woooaa。完善!我正在尋找這種解決方案。 +1 –

+0

太棒了!你能解釋爲什麼你克隆'Backbone.Events',不使用現有的對象? – skalee

+0

首先,你不克隆它,你用它擴展一個空的對象,例如如上所述或'var Dispatcher = Backbone.Events.extend({});'因爲所有的Backbone contstructor似乎都有內置的'extend'方法。至於爲什麼要創建另一個對象而不是使用Backbone.Events - 我會說,因爲你不想改變框架,作爲一個規則,創建一個Dispatched對象可能以後需要添加自定義方法。 IMO這種方式只是更清潔。 –