2012-06-24 12 views
8

क्या फ़्लैश संदेशों के लिए रीढ़ की हड्डी का विस्तार है? यह वेब फ्रेमवर्क (कम से कम सर्वर पक्ष) में एक आम विशेषता प्रतीत होता है। ,बैकबोनजेएस फ्लैश संदेश

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 सेंट - यह एक overkill का एक सा फ्लैश संदेशों के लिए रीढ़ का उपयोग करने लगता है। यदि आपके पास पृष्ठ पर फ़्लैश संदेश का केवल 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 
    } 
}); 

और ऐप्स का भाग आप फ़्लैश संदेश दिखाने के लिए जहां से ,

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

Woooaa। उत्तम! मैं उस तरह के समाधान की तलाश में था। +1 –

+0

बढ़िया! क्या आप समझा सकते हैं कि आप 'Backbone.Events' क्यों क्लोन करते हैं, मौजूदा ऑब्जेक्ट का उपयोग नहीं करते? – skalee

+0

सबसे पहले, आप इसे क्लोन नहीं करते हैं, आप इसके साथ एक खाली वस्तु, उदाहरण के लिए जैसा ऊपर उल्लिखित है या 'var Dispercher = Backbone.Events.extend ({});' क्योंकि सभी बैकबोन contstructors अंतर्निहित 'विस्तार' विधि प्रतीत होता है। Backbone.Events का उपयोग करने के बजाय एक और ऑब्जेक्ट क्यों बनाना है - मैं कहूंगा क्योंकि आप फ्रेमवर्क को एक नियम के रूप में बदलना नहीं चाहते हैं, और एक प्रेषित ऑब्जेक्ट बनाने के बाद बाद में कस्टम विधियों को जोड़ने की आवश्यकता हो सकती है। आईएमओ इस तरह से सिर्फ क्लीनर है। –

संबंधित मुद्दे