2008-10-23 55 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文件的方法更容易。