8

我已经看到这个问题重新考虑了与标签内容本身相关的 js 文件的导入。我有一个类似的问题,这里我有一个生成一些 HTML 的 jsp 标记,并有一个通用的 js 实现来处理这个 HTML 的行为。此外,我需要编写一些初始化语句,以便之后通过 JavaScript 使用它。为了能够在我的 JavaScript 中使用这个“处理程序”,它应该可以以某种方式访问​​。

问题是...可以将内联 <script> 标记与我的 HTML 一起编写用于实例化和初始化目的(我个人认为它不是很优雅)吗?关于 JS 世界可以访问,我是否应该留下一个全局变量来引用我的处理程序对象(我认为也不是很优雅),有没有更好的方法来做到这一点?

4

4 回答 4

9

您应该在自己的文件中争取 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 文件中唯一的 javascript 是需要存在的部分。核心功能在其自己的 js 文件中分离。

于 2008-10-23T13:50:09.660 回答
1

我不完全确定你在这里问什么,但我认为<script>在 JSP 中包含标签以实例化 javascript 代码没有任何问题。我经常遵循这个模型,在外部 javascript 文件中编写库代码,然后从<script>标签中调用我的对象的构造函数。

这使得调试变得容易,因为逻辑都在外部文件中(而且 firebug 似乎在调试内联 javascript 代码时遇到了麻烦)。库被缓存,但实例化它们的数据没有(这是所需的行为)。

另一种方法是在外部 javascript 文件或 AJAX 调用中动态生成实例化代码。我也这样做了,取得了积极的成果。

我认为决定因素是您拥有多少动态数据。如果您需要表示大型数据结构,我会通过返回 JSON 的 AJAX 调用来提供它。如果它是对构造函数的简单调用,请将其放在 JSP 中。

至于全局变量,我通常会为顶级对象设置一个全局变量,它会启动一切。在其中,是对辅助对象的所有其他引用。

于 2008-10-23T13:49:19.863 回答
0

尽管我同意它并不完全优雅,但众所周知,在将服务器端决策与 AJAX 集成环境结合起来时,我曾多次这样做。回显内联 <script> 标记以初始化某些变量并不是一件可怕的事情,只要没有人看到它。

至于更好的方法,我不知道这些。我很少这样做,以至于我没有寻求更优雅或“适当”的解决方案。

于 2008-10-23T13:48:30.707 回答
0

可以使用<script>符合 HTML 的标签。有时需要它,但至于任何更好的方法我不知道。在不让事情看起来更复杂的情况下,使用<script>标签比尝试找到实现 js 文件的方法更容易。

于 2008-10-23T13:49:45.603 回答