2012-02-13 3 views
2

ASP.NET MVC3 앱에서 작업 중입니다. 나는 다양한 장소에서 좋은 자바 스크립트 관행에 대해 읽고 있었고 내가 내보기의 맨 아래에 < 스크립트/> 태그에 앉아있는 javascript 및 jQuery 호출을 외부화하면 가장 좋을 것이라고 결정했습니다.스크립트를 외부화 할 때 javascript에서 올바른 URL을 생성하는 방법

각 뷰의 자바 스크립트를 표준화 된 명명 규칙을 사용하여 별도의 파일에 저장하므로 내 레이아웃보기에 적절한 파일을 포함하도록 < 스크립트/> 태그를 생성 할 수 있습니다.

하지만 유지 관리하기가 너무 복잡해지기 때문에 전체 스키마가 깨지는 한 가지 문제, 즉 URL을 자바 스크립트에 삽입해야하는 경우가 있습니다.

예 : $ .getJSON 호출을 수행하는 경우 URL을 제공해야합니다.

var _RegistrationSelectClassUrl = '@Url.Action("SelectClass", "Student", new { area = "Registration", id = Model.Person.PersonID })'; 

을 그리고 이것은까지 내가 자바 스크립트를 외부화 점에 ... 잘 일 : 그래서처럼 UrlHelper 클래스를 사용하여보기에, 서버 측에서 그들을 발생했습니다. UrlHelper에 대한 호출은 뷰의 일부가 아니므로 다시 문자열입니다.

내 질문은 이것입니다 : 내가 externalized 자바 스크립트 스틱, 나는 적절한 URL을 삽입하거나 생성하는 방법이 필요합니다. UrlHelper를 사용하여 모든 URL에 대해 상수를 정의하는 레이아웃 파일에서 스크립트 섹션을 고수하는 것 외에는 좋은 것을 생각할 수 없습니다.

제안 사항?

답변

2

외부 JS :

var namespace = { 
    init: function (url) { 
     this._RegistrationSelectClassUrl = url; 
    }, 
    _RegistrationSelectClassUrl: '' 
}; 

보기 :

<script src="external/js.js" /> 
<script> 
    namespace.init('@Url.Action("SelectClass", "Student", new { area = "Registration", id = Model.Person.PersonID })'); 
</script> 

이 기본적인 예입니다.

+0

나는 이것과 같이 갈 것입니다. –

+0

@JoeTuskan Url.Action을 사용하려고하면 어떤 JS가 뷰에 있는지에 상관없이 무엇이 있든 상관하지 않습니다. 고맙습니다! –

+0

예, 불행히도. 그러나 이렇게하면 최소 금액을 최소화 할 수 있습니다. 행운을 빕니다! – Joe

1

수 없습니다. 스크립트가 구문 분석 된 페이지를 떠나는 순간 모델에 대한 모든 액세스 권한이 손실됩니다. 이 코드를 PartialView에 추가하면 Helper 클래스로 구문을 분석 할 수 있지만 링크가 모델에 따라 다르므로 스크립트가 페이지 자체에서 생성되어야합니다.

외부화하는 방법은 모델보기 자체가 채워지는 링크의 매핑 된 배열을 갖는 것일 수 있습니다. 그런 다음로드 후 외부 스크립트가 액세스 할 수있는 키에 따라이 어레이 맵핑에 링크 텍스트를 추가 할 수 있습니다. 전역 변수를 사용하지 않고이 목적을 위해 객체를 프로토 타입하는 것을 권장합니다. 이것에 대한

일부 문서 : http://www.javascripttoolbox.com/bestpractices/#namespace

+0

링크가 좋습니다! 그리고 나는 당신의 제안에 감사드립니다. –

관련 문제