2008-10-23 6 views
7

this question은 태그 컨텐트 자체와 관련된 js 파일 가져 오기를 처리했습니다. 비슷한 문제가 있습니다. 여기에 HTML을 생성하는 jsp 태그가 있으며이 HTML의 동작을 처리하는 일반 js 구현이 있습니다. 또한 몇 가지 초기화 문을 작성해야하므로 나중에 JavaScript를 통해 사용할 수 있습니다. JavaScript에서이 "핸들러"를 사용할 수 있으려면 어떻게 든 액세스 할 수 있어야합니다.JSP 태그 내에서 JavaScript 사용

질문은 ... 인스턴스화 및 초기화 목적을 위해 내 HTML과 함께 < 스크립트 > 태그를 인라인으로 작성하는 것이 좋습니다 (개인적으로는 매우 우아하다고 생각하지 않습니다)? 그리고 JS 세계에 액세스 할 수 있다는 것에 관해서는, 전 세계적으로 var가 내 핸들러 객체를 참조해야한다고 생각합니다. (매우 우아하지도 않습니다.) 더 나은 방법이 있습니까?

답변

9

당신은 자신의 파일에서 자바 스크립트를 위해 노력해야합니다. 이것은 보통 Progressive Enhancement으로 이루어집니다. 그러나 동일한 JSP가 다른 언어로 페이지를 렌더링하는 경우와 같이 선택의 여지가없는 경우도 있습니다.

는 JSP :

<script src="/javascript/article_admin.js"></script> 
    <script type="text/javascript"> 
     NP_ArticleAdmin.initialize({ 
      text: { 
       please_confirm_deletion_of: '<i18n:output text="please.confirm.deletion.of"/>', 
       this_cannot_be_undone: '<i18n:output text="this.cannot.be.undone"/>' 
      } 
     }); 
    </script> 

자바 스크립트 (article_admin 다음은 실제 예입니다.js) :

/*global NP_ArticleAdmin, jQuery, confirm */ 
NP_ArticleAdmin = function ($) { 
    var text; 

    function delete_article(event) { 
     var article = $(this).parents("li.article"), 
     id = article.attr("id"), 
     name = article.find("h3.name").html(); 
     if (confirm(text.please_confirm_deletion_of + name + text.this_cannot_be_undone)) { 
      $.post("/admin/delete_article", {id: id}); 
      article.fadeOut(); 
     } 
     event.preventDefault(); 
     return false; 
    } 

    function initialize(data) { 
     text = data.text; 
     $("#articles a.delete").click(delete_article); 
    } 

    return {initialize: initialize}; 
}(jQuery); 

이 예에서 JSP 파일의 유일한 javascript가 있어야합니다. 핵심 기능은 자체 js 파일로 구분됩니다.

0

나는 완전히 우아하지 않다는 것에 동의하지만, 서버 측 의사 결정을 AJAX 통합 환경과 결합 할 때 몇 번 할 수있는 것으로 알려져 있습니다. 일부 변수를 초기화하기 위해 인라인 < 스크립트 > 태그를 반향하는 것은 아무도 보지 않는 한 끔찍한 일이 아닙니다.

더 나은 방법으로, 나는 이것들을 알지 못합니다. 나는 이것을 매우 드물게 수행하여보다 우아하고 "적절한"해결책을 찾지 못했습니다.

1

나는 당신이 여기서 무엇을 묻고 있는지 완전히 모르겠다.하지만 나는 JSP에 <script> 태그를 포함하는 것으로 잘못된 점이 없다. 자바 스크립트 코드를 인스턴스화한다. 종종이 모델을 따라 외부 자바 스크립트 파일에 라이브러리 코드를 작성한 다음 <script> 태그에서 생성자를 내 개체로 호출합니다.

논리가 모두 외부 파일에 있기 때문에 디버깅이 쉬워집니다 (방화 광에서 인라인 자바 스크립트 코드를 디버깅하는 데 문제가있는 것으로 보입니다). 라이브러리는 캐시에 저장되지만 데이터를 인스턴스화하는 데이터는 필요하지 않습니다 (원하는 동작).

대안은 외부 자바 스크립트 파일이나 AJAX 호출에서 인스턴스 생성 코드를 동적으로 생성하는 것입니다. 나는 긍정적 인 결과와 함께 이것 역시했습니다.

나는 결정적인 요소가 얼마나 동적 인 데이터인지 생각합니다. 대용량 데이터 구조를 표현해야하는 경우 JSON을 반환하는 AJAX 호출을 통해이를 제공합니다. 생성자에 대한 간단한 호출 인 경우 JSP에 넣습니다.

글로벌 변수는 모든 것을 시작하는 최상위 개체의 전역 변수를 갖습니다. 그 안에 헬퍼 객체에 대한 다른 모든 참조가 있습니다.

0

<script> 태그를 HTML과 함께 사용하면 정상입니다. 필요할 때가 있지만 더 좋은 방법은 내가 모를 때가 있습니다. 일을 더 복잡하게 보이지 않으면 서 <script> 태그를 사용하여 js 파일을 구현하는 방법을 찾는 것이 더 쉽습니다.