2011-10-10 2 views

답변

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'가 제공하는 대답을 통해 해당 함수를 호출 할 수 있지만 다소 다른 (아마도 더 나은) 접근 방법을 지적합니다. '모듈'패턴 개념을 따르면 문제를 효과적으로 해결할뿐만 아니라 사적인 변수를 가질 수 있습니다. ('Javascript에서 모듈 패턴'을 검색하면 온라인 리소스가 많아집니다.)

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());