2012-06-24 2 views
8

Có phần mở rộng cho xương sống cho tin nhắn Flash không? Nó có vẻ là một tính năng phổ biến trong các khung Web (ít nhất là ở phía máy chủ). Dường như không có, và tôi đã cố gắng tự làm cho mình:BackboneJS Tin nhắn 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 

Bây giờ, tôi tự hỏi làm thế nào tôi có thể tự động đưa chúng vào quan điểm của mình. Tôi sẽ thích thông điệp của Mẹ để hiển thị khi tôi sử dụng Backbone.Router.navigate() ví dụ:

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

Trả lời

13

My 5 cent - nó có vẻ là một chút của một overkill sử dụng Backbone cho các tin nhắn flash. Nếu bạn chỉ có 1 phiên bản của thông báo flash trên trang, bạn nên sử dụng một mô hình riêng cho nó.

Thay vào đó tôi sẽ sử dụng một cái nhìn cho thông điệp Flash và một điều phối toàn cầu:

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

Tạo view:

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

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

Và từ một phần của ứng dụng, nơi bạn có để hiển thị các tin nhắn nhấp nháy , làm

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

Woooaa. Hoàn hảo! Tôi đang tìm kiếm loại giải pháp đó. +1 –

+0

Tuyệt vời! Bạn có thể giải thích tại sao bạn sao chép 'Backbone.Events', không sử dụng đối tượng hiện có? – skalee

+0

Đầu tiên, bạn không sao chép nó, bạn mở rộng một đối tượng trống với nó, ví dụ: như đã đề cập ở trên hoặc bởi 'var Dispatcher = Backbone.Events.extend ({});' như tất cả các contstructors Backbone dường như có sẵn phương thức 'extend'. Đối với lý do tại sao để tạo một đối tượng thay vì sử dụng Backbone.Events - Tôi sẽ nói bởi vì bạn không muốn thay đổi framework, như một quy tắc, và tạo ra một đối tượng Dispatched sau này có thể yêu cầu thêm các phương thức tùy chỉnh. IMO theo cách này chỉ là sạch hơn. –