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

问题是......编写内联<!> lt; script <!> gt;是否可以标签以及我的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);

在此示例中,JSP文件中唯一的javascript是需要存在的部分。核心功能在其自己的js文件中分开。

其他提示

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

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

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

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

至于全局变量,我经常会有一个顶级对象的全局变量,它可以解决所有问题。在其中,是对辅助对象的所有其他引用。

虽然我同意它并不完全优雅,但在将服务器端决策与AJAX集成环境相结合时,我已经知道这样做了几次。回应内联<!> lt; script <!> gt;标签为了初始化一些变量并不是一件可怕的事情,只要没有人看到它。

至于更好的方法,我不知道这些。我很少这么做,所以我没有寻求更优雅或<!>正确的<!>溶液

使用符合HTML的<script>标签即可。有时需要它,但就我认识的任何更好的方法而言。在不使事情看起来更复杂的情况下,使用<=>标签然后尝试找到实现js文件的方法更容易。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top