2011-10-10 16 views
6

के अंदर है कि अगर मैं कुछ ऐसा था चलाने के लिए?कैसे एक JavaScript फ़ंक्शन एक namespace

App.editingMode(); लेकिन फिर setEditingMode पर जाने के लिए मैं क्या करूं ??

+2

AFAIK उन कार्यों को प्रभावी ढंग से निजी हैं, आप नहीं कर सकते हैं। –

उत्तर

0

आप window के साथ जोड़ते, उदाहरण के लिए एक के लिए एक संदर्भ वापसी या अन्यथा यह समारोह के बाहर से सुलभ बनाने के लिए, की आवश्यकता होगी (प्रभावी रूप से यह कर रही एक वैश्विक) या App वस्तु।

+0

हम्म मुझे आश्चर्यचकित करता है कि नेमस्पेसिंग से परेशान क्यों? – Cameron

+0

@ कैमरून नेमस्पेसिंग अभी भी एक अच्छा विचार है। यह मुझे लगता है कि है कि काम करेगा ही है करने के लिए 'App' वैश्विक तो वैश्विक काम करता है, वस्तुओं, आदि – alex

8

आप आप क्या चाहते हैं पूरा करने के लिए एक अलग संरचना का उपयोग कर सकते हैं। मुझे नहीं पता कि यह आपके द्वारा उपयोग किए जा रहे किसी और चीज़ को तोड़ देगा, इसलिए मैं आपको एक उदाहरण दूंगा। मुझे यकीन नहीं है कि यह वास्तविक समाधान है, कृपया एक नज़र डालें और मुझे बताएं कि क्या आपको इसकी आवश्यकता नहीं है। यदि आप का उपयोग करें:

var App = { 
       editingMode: 
       { 
        setEditingMode: function(entityID) { 
         $('#editingMode').val('1'); 
         $.ajax({ 
          type: "POST", 
          url: "/Organisations/Manage/LockEntity/", 
          data: "entityID=" + entityID 
         }); 
        }, 
        setEditingModeOff: function(entityID) { 
         if ($("#myform").valid() == true) 
         { 
          $('#editingMode').val('0'); 
          $.ajax({ 
           type: "POST", 
           url: "/Organisations/Manage/UnlockEntity/", 
           data: "entityID=" + entityID 
          }); 
         } 
        } 
       } 
      }; 

आप editingMode के तरीकों इस तरह कॉल कर सकते हैं:

App.editingMode.setEditingModeOff(1); 

सूचना है कि वे अभी भी एप्लिकेशन में समझाया जाएगा, आप आवश्यक रूप से उन वैश्विक क्षेत्र में ले जाने नहीं है।

+0

के दर्जनों है बेहतर है। लेकिन यह लगभग मुझे क्यों बिल्कुल नेमस्पेसिंग से परेशान करता है:/ – Cameron

+1

यह हमेशा उपयोगी है, मुझे नहीं लगता कि मैं एक टिप्पणी में स्वीकृत वर्णों की संख्या में लाभ सूचीबद्ध कर सकते हैं करते हैं। जब आपके पास दर्जनों ऑब्जेक्ट्स के साथ दर्जनों ऑब्जेक्ट्स के साथ एक बड़ी परियोजना है, तो आप नेमस्पेसिंग की सराहना करेंगे :) – Nikoloff

0

हालांकि इस सवाल का जवाब 'Nikoloff' द्वारा दिए गए आप उन कार्यों कॉल करने के लिए, लेकिन मैं कुछ अलग (और शायद बेहतर) दृष्टिकोण के लिए बाहर बिंदु होगा सक्षम बनाता है। के बाद 'मॉड्यूल' पैटर्न अवधारणा सिर्फ प्रभावी रूप से आपकी समस्या का समाधान नहीं होगा, लेकिन यह भी आप निजी चर के लिए अनुमति देते हैं। (जावास्क्रिप्ट में मॉड्यूल पैटर्न 'के लिए खोजें और यह आपको ऑनलाइन संसाधनों का भार देगा।)

App = { 
    editingMode: function() 
    {  
     // Below var is no way directly accessible and act as private var 
     var privateVar =5; 
     // Below function is going to give access to private var 
     function getPrivateVar(){ 
      return privateVar; 
     } 
     //Your functions - untouched 
     function setEditingMode(entityID) { 
      $('#editingMode').val('1'); 
      $.ajax({ 
       type: "POST", 
       url: "/Organisations/Manage/LockEntity/", 
       data: "entityID=" + entityID 
      }); 
     } 
     function setEditingModeOff(entityID) { 
      if ($("#myform").valid() == true) 
      { 
       $('#editingMode').val('0'); 
       $.ajax({ 
        type: "POST", 
        url: "/Organisations/Manage/UnlockEntity/", 
        data: "entityID=" + entityID 
       }); 
      } 
     } 
     return { 
      setEditingMode: setEditingMode, 
      setEditingModeOff: setEditingModeOff, 
      getPrivateVar: getPrivateVar 
     } 
    } 
}; 

App.editingMode().setEditingMode(); 
console.log(App.editingMode().getPrivateVar()); 
संबंधित मुद्दे