문제

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

문제는 ... 인라인을 쓰는 것이 괜찮습니까?u003Cscript> tags along with my HTML for instantiation and initialization purposes (personally I don't think its very elegant)? And about being accessible to the JS world, should I leave a global var referencing my handler object (not very elegant aswell I think), are there better ways to do it?

도움이 되었습니까?

해결책

자체 파일에서 JavaScript를 위해 노력해야합니다. 이것은 일반적으로 완료됩니다 진보적 인 향상. 그러나 때로는 동일한 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>  

JavaScript (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-File의 유일한 JavaScript는 필요한 부분입니다. 핵심 기능은 자체 JS 파일로 분리됩니다.

다른 팁

나는 당신이 여기서 무엇을 묻는 지 확실하지 않지만 <script> JSP의 JavaScript 코드를 인스턴스화하기위한 태그. 나는 종종이 모델을 따르면서 외부 JavaScript 파일로 라이브러리 코드를 작성한 다음 생성자를 <script> 태그.

로직은 외부 파일에 있으므로 디버깅을 쉽게 할 수 있습니다 (Firebug는 인라인 JavaScript 코드를 디버깅하는 데 어려움이있는 것 같습니다). 라이브러리가 캐시되지만 인스턴스화하는 데이터는 (원하는 동작이 아닙니다).

대안은 외부 JavaScript 파일 또는 Ajax 호출에서 인스턴스화 코드를 동적으로 생성하도록하는 것입니다. 나도 긍정적 인 결과를 얻었습니다.

결정 요인은 당신이 얼마나 많은 동적 데이터를 가지고 있는지라고 생각합니다. 큰 데이터 구조를 나타내야하는 경우 JSON을 반환하는 Ajax 호출을 통해 제공합니다. 생성자에게 간단한 호출이 있으면 JSP에 넣으십시오.

글로벌 변수는 종종 모든 것을 시작하는 최상위 객체에 대한 글로벌을 갖게됩니다. 그 안에는 도우미 대상에 대한 다른 모든 언급이 있습니다.

나는 그것이 완전히 우아하지 않다는 데 동의하지만, 서버 측 결정을 Ajax 통합 환경과 결합 할 때 몇 번이나하는 것으로 알려져 있습니다. 반향 인라인u003Cscript> tags in order to initialize some variables isn't a terrible thing, as long as no one sees it.

더 나은 방법에 관해서는, 나는 이것을 알지 못합니다. 나는 더 우아하거나 "적절한"솔루션을 찾지 못했기 때문에 이것을 거의하지 않았습니다.

사용해도 괜찮습니다 <script> HTML에 따라 태그. 필요한 경우가 있지만 더 나은 방법까지는 알지 못합니다. 물건을 더 복잡해 보이지 않으면 사용하기가 더 쉽습니다. <script> 그런 다음 JS 파일을 구현할 수있는 방법을 찾으려고 태그.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top