2009-09-16 5 views
2

Walter RumsbyWhere to place JavaScript in an HTML file에 대한 좋은 답을 제공합니다. 그는 Yahoo Exceptional Performance 팀이 수행 한 작업과 자신의 추천 내용을 place scripts at the bottom of the page이라고 말합니다. 내가 언젠가는 지금까지 따라 왔던 단호하고 빠른 규칙이다. 동일한 스레드에서 Levi Rosol은 "가장 좋은 장소는 [JavaScript]가 필요하기 직전입니다."라고 지적했습니다. 그게 내가 지금 내 자신을 발견 할 수있는 곤경이다.HTML 문서 맨 아래에 jQuery 참조 배치 사용자 컨트롤

내 페이지의 끝에 jQuery에 대한 참조를 추가했지만 클라이언트를 추가하고 싶은 사용자 정의 컨트롤을 구성하는 방법에 문제가있다. 측면 기능을 제공합니다. 특히, 의존성을 수용하는 최선의 방법을 찾기가 힘듭니다. 사용자 정의 컨트롤에는 사용자가 사용자 컨트롤에서 체크 한 체크 상자 수에 따라 업데이트 할 숫자 값이 포함 된 span 태그가 있습니다. span 태그를 찾고 text 속성을 업데이트하기 위해 jQuery를 사용하고 있습니다.

jQuery에 대한 참조가 사용자 컨트롤 이전에 표시되지 않으면 JavaScript 오류가 발생합니다. 이것은 컨트롤이 아직 추가되지 않은 함수를 참조하기 때문에 의미가 있습니다. 문제에 대한 여러 가지 해결책을 생각할 수 있지만 모범 사례 옵션을 찾고 있습니다.

  1. 사용자 정의 컨트롤 내부의 jQuery 라이브러리에 대한 참조 배치.
    • 단점 : 사용자 컨트롤이 리피터에 배치 된 경우 jQuery 라이브러리에 대한 여러 참조가 만들어집니다.
  2. 사용자 정의 컨트롤에 JavaScript가없고 모든 코드가 포함 된 페이지의 사용자 정의 컨트롤에 대한 span 태그를 업데이트하십시오.
    • 단점 : 잠재적 인 유지 관리의 악몽을 불러 일으키는 여러 곳에서 같은 코드로 끝납니다.
  3. 페이지 머리 부분에 jQuery 참조를 놓습니다.
    • 단점 : place scripts at the bottom of the page에 대한 권장 사항을 위반했으며 페이지에 jQuery에 대한 참조가 포함되지 않은 경우 사용할 수없는 사용자 정의 컨트롤을 만들었습니다.

그는 옵션과 단점은 내가이 문제에 대한 해결책에 대해 생각할 때 함께했다입니다. 나는 더 나은 해결책을 제안하고 아무도 내가 선택해야 할 세 가지 중 어느 것에 대한 권고를 찾는 것을 금지하지 않는다.

답변

1

다른 옵션은 문서 헤드에 대한 스크립트 참조를 작성한 사용자 정의 컨트롤에서 시작 스크립트를 등록하여 동적으로 스크립트 참조를 생성하는 것입니다.

javascript 함수는 기존 jQuery 참조를 확인할 수 있으며, 아무것도 발견되지 않은 경우 참조를 작성합니다. 이렇게하면 여러 참조가 해결됩니다. 기본적인 예가 논의되었습니다 in this thread.

0

내가 찾은 가장 간단한 해결책은 도우미를 사용하여 다른 페이지 요소를 렌더링하는 동안 페이지 본문에 포함될 자바 스크립트 조각을 축적하는 것입니다. 그런 다음 jQuery를 먼저 포함하고 지연된 리터럴 Javascript 조각을 포함 할 수 있습니다.

페이지 생성 중에 일부 추가 상태를 유지해야하므로 렌더링 파이프 라인이 복잡해질 수 있습니다. 그러나 jQuery에 대한 기존 참조를 선택하기 위해 페이지를로드 한 후 복잡한 DOM 조작 없이도 지연된 Javascript 포함을 얻을 수 있습니다. 내가 권하고 싶습니다

http://code.google.com/p/jingo/

또 다른 해결책은 YUI 로더 유틸리티와 같은 로더 :

+0

예제가 있습니까? – ahsteele

+0

당신이 사용하고있는 언어 나 툴킷을 모르겠다. 일반적인 개요가있다 :'addToHeader'와'addToFooter' 메쏘드로'JSHelper'라는 싱글 톤 클래스를 만드십시오. 각각은 하나의 문자열 인자를 받아서 추가합니다. 'header '또는'footer' 배열 인스턴스 변수에 추가합니다. 그런 다음 템플릿 또는 렌더링 메서드에서 페이지의 섹션에서 해당하는 outputHeader()를 호출하고 태그 바로 앞에있는 outputFooter()를 호출합니다. (이러한 구현은 독자를위한 연습 과제로 남겨 두었습니다.) – rcoder

2

당신이라는 무모한 강경 외교 론자보고 할 수 있습니다 이러한 고통을 해결하는 것을 목표로 구글 프로젝트가있다.

http://developer.yahoo.com/yui/yuiloader/

그것은 당신이 등 종속성을 관리 할 수 ​​있습니다 당신은 자신의 UI 구성 요소를 사용할 때 그냥 유용하지 않습니다. 그것은 무엇이든을 위해 이용 될 수있다; addModule 주변의 문서를 보라.

ASP.NET을 사용하는 경우 ScriptManager는 좋은 해결책입니다.

관련 문제