Вопрос

Я видел этот вопрос , касающийся импорта js-файлов, связанных с сам тег содержимого. У меня похожая проблема, здесь у меня есть тег jsp, который генерирует некоторый HTML и имеет общую реализацию js, которая обрабатывает поведение этого HTML. Кроме того, мне нужно написать некоторые операторы инициализации, чтобы потом можно было использовать их через JavaScript. Чтобы можно было использовать этот & Quot; handler & Quot; в моем JavaScript это должно быть как-то доступно.

Вопрос в том ... Можно ли писать inline < script > теги вместе с моим HTML для целей создания и инициализации (лично я не думаю, что это очень элегантно)? И что касается доступности для мира JS, должен ли я оставить глобальную переменную, ссылающуюся на мой объект-обработчик (я думаю, не очень элегантно), есть ли лучшие способы сделать это?

Это было полезно?

Решение

Вы должны стремиться к 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);

В этом примере единственным javascript в JSP-файле является та часть, которая должна быть там. Основные функциональные возможности разделены в своем собственном js-файле.

Другие советы

Я не совсем уверен, что вы спрашиваете здесь, но я не ошибаюсь, если включаю теги <script> в JSP для создания кода javascript. Я часто следую этой модели, пишу код библиотеки во внешних файлах javascript, а затем вызываю конструкторы для моих объектов из тегов <=>.

Это облегчает отладку, поскольку вся логика находится во внешних файлах (и похоже, что у firebug есть проблемы с отладкой встроенного кода javascript). Библиотеки кэшируются, а данные, создающие их экземпляры, - нет (что является желаемым поведением).

Альтернатива заключается в том, чтобы код создания экземпляров динамически создавался во внешнем файле JavaScript или при вызове AJAX. Я тоже это сделал с положительными результатами.

Я думаю, решающим фактором является количество динамических данных. Если вам нужно представить большие структуры данных, я бы обслужил это с помощью вызова AJAX, который возвращает JSON. Если это простой вызов конструктора, поместите его в JSP.

Что касается глобальной переменной, у меня часто будет глобальная переменная для объекта верхнего уровня, которая запускает все. Внутри этого находятся все другие ссылки на вспомогательные объекты.

Хотя я согласен с тем, что это не совсем элегантно, я уже несколько раз делал это, комбинируя решения на стороне сервера с интегрированной средой AJAX. Вывод в строку & Lt; script & Gt; теги для того, чтобы инициализировать некоторые переменные, не страшны, если их никто не видит.

Что касается лучших методов, я не знаю об этом. Я делал это настолько редко, что не искал более элегантного или & Правильного & Quot; Решение.

Все в порядке с использованием тегов <script> в соответствии с HTML. Бывают времена, когда это необходимо, но о каких-либо лучших путях я не знаю. Не делая вещи более сложными, проще использовать тег <=>, чем пытаться найти способ реализации файлов js.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top