2012-06-24 12 views
8

フラッシュメッセージ用のバックボーンの拡張はありますか?これは、Webフレームワーク(少なくともサーバー側)の共通の機能のようです。そこ何もないように見える、と私は自分の作ることを試み: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 

、私は自動的に私の意見にそれらを注入することができますどのように思っていました。私は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つしかない場合は、別のモデルを使用しない方がよいでしょう。

代わりに私はフラッシュメッセージとグローバルディスパッチャのためのビューを使用します。

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 
    } 
}); 

そして、あなたはフラッシュメッセージを表示する必要があるアプリの一部からを、do

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

Woooaa。完璧!私はそのような解決策を探していました。 +1 –

+0

素晴らしい!なぜあなたは 'Backbone.Events'をクローンして、既存のオブジェクトを使わないのですか? – skalee

+0

まず、クローンしないでください。上記のように、または 'var Dispatcher = Backbone.Events.extend({});'によって実行されます。すべてのBackboneコンストラクタは組み込みの 'extend'メソッドを持っているようです。 Backbone.Eventsを使用する代わりに別のオブジェクトを作成する理由については、原則としてフレームワークを変更したくないので、後でカスタムメソッドを追加する必要があるかもしれません。このようにIMOはちょうどクリーナーです。 –

関連する問題