2012-06-24 6 views
8

플래시 메시지의 백본 확장이 있습니까? 웹 프레임 워크 (최소한 서버 측)에서 일반적인 기능인 것 같습니다. 이 아무도 없을 것처럼, 나는 내 자신 만드는 시도 :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

우요 아아. 완전한! 나는 그런 종류의 해결책을 찾고 있었다. +1 –

+0

좋아요! 왜 '백본. 이벤트'를 복제하고 기존 객체를 사용하지 않는지 설명해 주시겠습니까? – skalee

+0

우선, 복제하지 마십시오. 비어있는 객체를 확장합니다 (예 : 위에서 언급 한 것처럼 또는'var Dispatcher = Backbone.Events.extend ({});'에 의해 모든 Backbone 컨스트럭터가'extend' 메소드를 내장하고있는 것으로 보입니다. Backbone.Events를 사용하는 대신 다른 객체를 만드는 이유는 프레임 워크를 변경하지 않고 Dispatched 객체를 만들 때 나중에 사용자 정의 메서드를 추가해야하기 때문입니다. 이 방법은 단지 청소기입니다. –