1. 程式人生 > >從零開始學習jQuery (八) 插播:jQuery實施方案

從零開始學習jQuery (八) 插播:jQuery實施方案

本系列文章導航

一.摘要

本系列文章將帶您進入jQuery的精彩世界, 其中有很多作者具體的使用經驗和解決方案,  即使你會使用jQuery也能在閱讀中發現些許祕籍.

本篇文章屬於臨時插播,  用於介紹我在本公司的jQuery實施方案.

二.前言

有了前幾章紮實的基礎知識我們已經可以在專案中投入使用jQuery了.再繼續深入學習jQuery前插播一下我的jQuery實施方案.

每個公司的情況都不同.比如我們公司的頁面檔案都為使用者控制元件, 物理路徑和虛擬路徑沒有絕對的關係, 所以無法使用相對路徑(否則生產環境中會找不到檔案).  專案繁多, 同一個虛擬目錄的不同資料夾對應不同專案工程等等.

此方案並不是通用的, 但是有些方法可以借鑑, 同時也是希望能和大家一起討論幫忙指正.

三.類庫檔案管理方案

存放根路徑: src\Assembly\resource.eLong.Web.Files\Resource\JSLib\jquery\

引用根路徑:  http://resource.elong.com/JSLib/jquery/

壓縮版本引用路徑:  http://resource.elong.com/JSLib/jquery/jquery-min-lastest.js

根路徑檔案列表:

image

在每一個Web工程專案下面建立js資料夾, 放置 jquery-vsdoc-lastest.js 檔案:

image

說明:

首先將所有版本的jQuery類庫放到靜態伺服器上, 並且按照資料夾存放類庫檔案. 但是會選出來一個最新版本作為引用並且放置在根目錄.

根目錄下面包含如下檔案:

名稱 內容 說明
資料夾1.3.2 按照版本號組織的jQuery類庫. 對於1.3.2即以後的每個jquery版本, 會按照資料夾存放類庫檔案. 但是會用最新的穩定版本覆蓋各lastest名稱的js檔案.
資料夾plugin 存放外掛的資料夾 將各種外掛以資料夾的形式存放到此路徑下
jquery.extend-lastest.js elong自己擴充套件的jQuery方法 未來我們將打造自己的javascript類庫.其中有一些核心的類庫放在此檔案中. 相當於我們自己的工具類庫. 通過擴充套件jQuery實現.
主要分為工具函式和包裝集函式兩類.
jquery-lastest.js jQuery未壓縮類庫最新版本 最新的穩定版本的jQuery原始類庫.
jquery-min-lastest.js jQuery壓縮類庫最新版本 最新的穩定版本的jQuery壓縮類庫.
jquery-vsdoc-lastest.js jQuery智慧提示類庫最新版本 最新的穩定版本的jQuery智慧提示類庫.


為了在開發時實現智慧感知, 還需要將智慧感知版本放置在每個web專案的js資料夾中. 因為Web專案眾多所以請以後第一個使用者建立此資料夾並放入檔案. 

四.類庫引用方案

在所有的頁面head中,  最先引用jQuery的類庫, 使用絕對路徑:

然後通過if(fasle)引入智慧提示版本的指令碼塊. 路徑使用"~"從根目錄開始查詢. 我在各個頻道的專案原始碼中統一建立js資料夾並且放置jquery-vsdoc-lastest.js最新的智慧感知版本類庫. 注意此檔案不需要打包上傳, 僅用於開發時的智慧提示.

這樣可以確保編譯後的頁面只引入了壓縮版本的jQuery類庫.

示例程式碼:

<head runat="server">
    <title>jQuery 引用方案</title>
    <script type="text/javascript" src="http://resource.elong.com/JSLib/jquery/jquery-min-lastest.js"></script>
    <% if (false){%>
    <script src="~/js/jquery-vsdoc-lastest.js" type="text/javascript"></script>
    <% }%>
</head>

說明:

在我們的網站中, 靜態檔案儲存在另外一個二級域名resource.elong.com下, 使用了CDN. 為了保證測試環境和正式環境一致只能使用絕對路徑引用jQuery庫. 但是使用絕對路徑引用jQuery智慧提示版本後不會出現指令碼智慧提示. 所以我們通過此特性直接引用絕對路徑的壓縮版本jQuery類庫, 從而巧妙的解決了1.3.2壓縮版本引入後智慧提示系統出錯的問題.

雖然動態頁面可以通過 if(false) 取消引入智慧提示版本類庫, 但是在HTML頁面上就無法使用伺服器語句塊.所以對於HTML頁面需要在開發完畢程式釋出前手工刪除智慧提示版本的引用.

五.開發使用方案

jQuery是指令碼庫而不是指令碼框架, 無法限制使用者如何使用,  所以很容易讓頁面上的指令碼變得混亂.

在沒有找到何時的指令碼管理框架前, 使用如下方式在頁面上使用指令碼:

1. 在頁面底部新增<script>區域,  兩個function分別放置 "事件繫結""載入時執行" 的語句.  即使在載入時執行的javascript也必須要保證DOM載入完畢後執行. 所以兩個function都被巢狀在$()中保證在DOM載入完畢後呼叫.

2. 應儘量避免在頭部載入指令碼. 必須在頭部載入的可以在頁面head中新增一個script區域.

3."自定義函式"要放在"事件繫結"和"載入時執行"語句塊之上, 並且不需要包含在$()中.

下面是一個完整頁面的示例程式碼:

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>jQuery 引用方案</title>
    <script type="text/javascript" src="http://resource.elong.com/JSLib/jquery/jquery-min-lastest.js"></script>
    <% if (false){%>
    <script src="~/js/jquery-vsdoc-lastest.js" type="text/javascript"></script>
    <% }%>
    <script type="text/javascript">
        //必須放在頭部載入的語句塊. 儘量避免使用
    </script>
</head>
<body>
    <div id="divMsg">Hello World!</div>
    <input id="btnShow" type="button" value="顯示" />
    <input id="btnHide" type="button" value="隱藏" /><br />
    <input id="btnChange" type="button" value="修改內容為 Hello World, too!" />
    <script type="text/javascript" >
        //使用者自定義方法
        function demoMethod(event)
        {
            $("#divMsg").hide(500);
        }


        //事件繫結  
        $(function()
        {                      
            $("#btnShow").bind("click", function(event) { $("#divMsg").show(500); });
            $("#btnHide").bind("click", demoMethod);
            $("#btnChange").bind("click", function(event) { $("#divMsg").html("Hello World, too!"); }); 
        });

        //載入時執行的語句
        $(function()
        {            
            $("#btnShow").attr("value", "被修改後的顯示按鈕") 
        });    
    </script>
</body>
</html>

六.總結

在確認了沒有公佈任何保密資訊後,  我發表了本文. 沒有太多技術含量,  主要是針對所在公司推廣jQuery的具體實施方法.

另外我一直想找一個成型的指令碼框架用來組織管理各種js類庫和js檔案. 這都需要在以後的工作中探索.