2012-05-29 15 views
7

की आवश्यकता है मैं एक उपयोगकर्ता सत्र मॉडल बनाना चाहता हूं, जो jQuery कुकी प्लगइन का उपयोग कर कुकी में सत्र आईडी लोड और सहेजता है।जेएस रीढ़ की हड्डी जेएस वैश्विक मॉडल

यह मेरा UserSession मॉडल मॉड्यूल के लिए मेरी कोड है:

define(['jQuery', 'Underscore', 'Backbone'], 
function($, _, Backbone){ 

    var UserSession = Backbone.Model.extend({ 
     defaults: { 
      'accessToken': null, 
      'userId': null 
     }, 
     initialize: function(){ 
      this.load(); 
     }, 
     authenticated: function(){ 
      return Boolean(this.get('accessToken')); 
     }, 
     save: function(authHash){ 
      $.cookie('userId', authHash.id); 
      $.cookie('accessToken', authHash.accessToken); 
     }, 
     load: function(){ 
      this.userId = $.cookie('userId'); 
      this.accessToken = $.cookie('accessToken'); 
     } 
    }) 

    return UserSession; 
}); 

लेकिन कहते हैं कि मैं अपना लॉगिन दृश्य में इसे का उपयोग करना चाहते हैं:

define(['jQuery', 'Underscore', 'Backbone', 'text!templates/login.html', 'models/UserLogin', 'models/UserSession'], 
function($, _, Backbone, loginTemplate, UserLogin, UserSession){ 

    var LoginView = Backbone.View.extend({ 
     model: new UserLogin, 
     el: $('#screen'), 
     events: { 
      'submit #frm-login': 'login' 
     }, 
     login: function(e){ 
      e.preventDefault(); // Lets not actually submit. 

      this.model.set({ 
       'username': $('#login-username').val(), 
       'password': $('#login-password').val() 
      }); 

      this.model.save(null, { 
       success: function(nextModel, response){ 
        // Do something here with UserSession model 
       }, 
       error: function(){ 
       } 
      }); 
     }, 

     render: function(){ 
      $(this.el).html(_.template(loginTemplate, {})); 
      return this; 
     } 
    }); 

    return new LoginView; 
}); 

बात है हर बार मैं UserSession का उपयोग मॉड्यूल में मॉडल (model.save सफलता कॉल बैक फ़ंक्शन देखें) यह डिफ़ॉल्ट मानों का उपयोग करता है, इसलिए मुझे UserSession मॉडल के किसी प्रकार का सिंगलटन उदाहरण होना चाहिए, मैं यह कैसे कर सकता हूं?

मेरा पहला विचार ऐप नेमस्पेस का उपयोग करना था, इसलिए हमारे main.js (पहले मुख्य मॉड्यूल जो लोड हो जाता है) में और वहां UserSession मॉड्यूल प्रारंभ होता है, और प्रत्येक बार जब मॉड्यूल उस मॉड्यूल तक पहुंच जाता है, तो उस मुख्य मॉड्यूल की आवश्यकता होती है एक ऑब्जेक्ट जो UserSession उदाहरण देता है।

यह कैसे किया जा सकता है?

धन्यवाद

+0

आपका पहला विचार सही समाधान प्रतीत होता है। अन्यथा, आपको स्थानीय-स्टोरेज/कुकीज़ और ऐसी सामग्री में उपयोगकर्ता-सत्र को स्टोर करना होगा ... –

+0

आप सर्वर पर सत्र कैसे उत्पन्न करते हैं और इसे एक्सेस करते हैं? मैं एक ही दृष्टिकोण का उपयोग करना चाहता हूं लेकिन मुझे कुकी सामग्री तक पहुंचने में समस्याएं आ रही हैं। मेरे पास लॉगिन दृश्य नहीं है क्योंकि यह सर्वर द्वारा प्रस्तुत किया जाता है। – Gambo

उत्तर

21

मान लिया जाये कि आप अपने पूरे आवेदन भर में एक भी वैश्विक UserSession चाहते हैं, मैं तो बस UserSession मॉड्यूल से एक instantiated UserSession लौट आते हैं। जब भी आप एक परिभाषित कॉल में उपयोगकर्ता सत्र का उपयोग करते हैं तो आपको वही ऑब्जेक्ट वापस मिल जाएगा। उदाहरण के लिए

define(['jQuery', 'Underscore', 'Backbone'], 
function($, _, Backbone){ 
    var UserSession = Backbone.View.extend({ ... }); 

    return new UserSession(); 
}); 
तब कहीं

:

define(['UserSession'], 
function(UserSession){ 
    // UserSession in here will be the singleton you created in the UserSession module 
    alert(UserSession.authenticated()); 
}); 

Require.js केवल UserSession मॉड्यूल एक बार की परवाह किए बिना चलाना चाहिए कितनी बार इसे कहीं और प्रयोग किया जाता है, तो UserSession वस्तु आप में दृष्टांत वहाँ प्रभावी रूप से एक सिंगलटन है ।

+3

आप उन्हें दो अलग-अलग फाइलों, उपयोगकर्ता सत्र और UserSessionSingleton में भी अलग कर सकते हैं। यदि आप आवश्यकता कथन से उदाहरण या कन्स्ट्रक्टर प्राप्त कर रहे हैं तो यह स्पष्ट हो सकता है। –

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