2013-02-28 22 views
2

와 해시 값에서 자바 스크립트 함수를 호출 나는 현재 페이지로드 해시 값에서 함수를 호출하는 코드를 가지고 :네임 스페이스

$(function() { 
    var hash = window.location.hash.substring(1); 
    window[hash](); 
}); 

이 잘 작동합니다.

그러나, 내 자바 스크립트과 같이 네임 스페이스 : 나는 네임 스페이스 자바 스크립트가 작동하지 않습니다 상단을 나열

var help = { 
      faq: function() { 
       //do stuff 
      }, 

      newFeatures: function() { 
       //do stuff 
      } 
    } 

내 기능. 수동으로 네임 스페이스를 앞에 추가하려고 했으므로 (var hash = "help." + window.location.hash.substring(1);) 작동하지 않습니다.

네임 스페이스에서 자바 스크립트를 제거하지 않고이 문제를 해결하려면 어떻게해야합니까?

답변

3

이 작동합니다 : 자바 스크립트 점 표기법 대괄호에서

$(function() { 
    var hash = window.location.hash.substring(1); 
    window.help[hash](); 
}); 

이 상호 교환, 한 키가 유효한 자바 스크립트 식별자 때문이다. (그렇지 않으면, 당신은 대괄호를 사용합니다.)

그래서 당신은 또한 할 수있는 (점 표기법을 더 읽을 수 있지만)이 :

$(function() { 
    var hash = window.location.hash.substring(1); 
    window["help"][hash](); 
}); 
+0

아주 좋습니다. 고맙습니다! 나는 가능한 한 빨리 이것을 받아 들일 것이다. – Johannes

-2

정말 아니에요 팬하지만, '평가'수도 작업 :

eval(hash + "()"); 

예 : 내가 해시에서 객체 값을 저장 유사한 방법을 사용하고 http://jsfiddle.net/pGktd/

1

.

내 기술 :

  • 계층 구조를 보여주기 위해 해시 점을 사용 - 귀하의 경우 :
  • 는 점 표기법을 변환하고 실제 값을 검색하는 스크립트를 실행 #의 help.faq

라이브 데모 : http://jsfiddle.net/Kn4w2/1/

코드 샘플 :

var hashArray=hash.split("."), 
    myMethod=window; 
for (var i=0;i<hashArray.length;i++){ 
     myMethod=myMethod[hashArray[i]]; 
} 

유일한 제약은 메소드 이름에 점이 없어야한다는 것입니다.

+0

이 솔루션에 대해 정말 좋아하는 점은 여러 네임 스페이스를 쉽게 허용하고 동일한 기능을 다시 사용할 수 있다는 것입니다. 귀하의 의견에 감사드립니다. 감사! – Johannes

+0

물론입니다! 실제로 두 단계 이상의 일반적인 경우 (예 : # help.faq.question1)에 사용하지만 유효성 검사 단계를 추가해야하므로 코드가 복잡해집니다. – Christophe

+0

사실 웹 프로젝트를 단일 페이지 응용 프로그램으로 바꾸는 것을 고려하고 있습니다. 이렇게 설정하면 컨트롤러와 액션에 대한 매핑이 javascript와 ajax로 쉽게 할 수 있습니다. – Johannes

관련 문제