2011-12-12 10 views
19

क्या रीढ़ की हड्डी में एक समारोह निजी बनाने का कोई तरीका है, ताकि यह केवल मॉडल के संपर्क में हो और this तक पहुंच सके?backbone.js मॉडल में कोई निजी फ़ंक्शन कैसे जोड़ें?

मैं updateTime निजी कैसे बना सकता हूं?

var Timeline = Backbone.Model.extend({ 
     url: 'servertime/', 

     start: function(){ 
      this.fetch({ 
       success: function(timeline, response){ 
        timeline.updateTime(); 
        setInterval(function() { 
         timeline.updateTime(); 
        }, 60 * 1000); 
       } 
      }); 
     }, 

     updateTime: function(){ //How can I make this private? 
      this.time = ... 
     } 
    }); 

उत्तर

14

आप इस तरह से एक आत्म लागू गुमनाम समारोह में यह सब लपेटकर द्वारा इस लक्ष्य को हासिल कर सकते हैं, तो आप यह सुनिश्चित करें कि updateTime निजी है कर रहे हैं:

(function() { 
    var updateTime = function(){ // this stays private to this anonymous function 
    this.time = ... 
    }, 
    Timeline = Backbone.Model.extend({ 
    url: 'servertime/', 

    start: function(){ 
     this.fetch({ 
     success: function(timeline, response){ 
      updateTime.call(timeline); 
      setInterval(function() { 
      updateTime.call(timeline); 
      }, 60 * 1000); 
     } 
     }); 
    } 
    }); 

})(); 
+1

यह उदाहरण गलत है क्योंकि 'अपडेटटाइम' अब समयरेखा विधि नहीं है और 'इसका' गलत संदर्भ है। – masylum

+0

आप सही हैं मैं जल्दी में था, मैंने अब अपना उदाहरण संपादित कर लिया है। – alessioalex

+0

यह सुनिश्चित करने के लिए 'updateTime.call (टाइमलाइन) 'को ध्यान में रखना महत्वपूर्ण है कि उचित संदर्भ' अपडेटटाइम 'पर पास किया गया है। –

7

आप updateTime एक निजी समारोह बना सकते हैं लेकिन निजी विधि नहीं है। मैं यह भी स्पष्ट करने के लिए अंडरस्कोर को प्रीपेड करने की अनुशंसा करता हूं कि यह एक निजी कार्य है।

(function() { 
    function _updateTime(timeline){ 
    timeline.time = ... 
    } 

    Timeline = Backbone.Model.extend({ 
    url: 'servertime/', 

    start: function(){ 
     this.fetch({ 
     success: function(timeline, response){ 
      _updateTime(timeline); 
      setInterval(function() { 
      _updateTime(timeline); 
      }, 60 * 1000); 
     } 
     }); 
    } 
    }); 

})(); 
+1

* फ़ंक्शन * बनाम * विधि * के संबंध में विशिष्टता के लिए अंगूठे ऊपर। – pilau

+0

अंडरस्कोर * किसी भी तरह से जोड़ना * यह स्पष्ट करता है कि यह एक निजी कार्य है; हालांकि _private या निजी नामक किसी ऑब्जेक्ट में ऐसे सभी कार्यों को समूहीकृत करना (लेकिन 'निजी' नहीं है क्योंकि यह एक आरक्षित शब्द है), जैसे कि फ़ंक्शन को _private.updateTime() या PRIVATE.updateTime() –

+2

@GeorgeJempty के रूप में शामिल किया जा सकता है: मैं असहमत हूं। सम्मेलन द्वारा अंडरस्कोर के साथ एक विधि को उपसर्ग करने से पता चलता है कि यह निजी है, भले ही यह सार्वजनिक रूप से सुलभ हो। मैंने इसे जेएस डिजाइन पैटर्न किताबों में पढ़ा है। –

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