2008-10-23 46 views
7

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

现在的问题是可以写内联<脚本>标签与我的HTML实例化和初始化目的(个人我不认为它非常优雅)?关于JS世界的访问,我是否应该留下一个引用我的处理程序对象的全局变量(我认为这不是很优雅),有没有更好的方法来实现它?

回答

9

你应该在自己的文件中努力争取javascript。这通常通过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> 

的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文件中被分开。

0

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

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

1

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

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

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

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

至于全局变量,我会经常有一个全局的顶级对象,把所有东西都关闭。里面,是所有其他引用辅助对象。

0

可以使用<script>标签符合HTML。有时候需要它,但是就我不知道的更好的方式而言。没有让事情看起来更复杂,使用<script>标签然后试图找到实现js文件的方法更容易。