DataTables 1.7 新功能

DataTables 1.7 版本包含許多新功能,以及針對開發人員改進的互動方法,因此這是一個令人興奮的版本。有些變更是小的,有些是大的,但整體而言,DataTables 1.7 的使用體驗應該會好很多。希望這些新功能集能讓您覺得這次升級是值得的。請盡情享受!

主要新功能

  • X 和 Y 軸捲動
    • X 軸捲動範例 | Y 軸捲動範例 | XY 軸捲動範例 | Y 軸主題捲動範例
    • 在處理大型資料集,但受限於小的可見區域時,有必要向最終使用者提供視覺方法,指示有更多可用的資料,並使其易於存取。DataTables 中一直使用分頁來實現此目的,但在 1.7 版本中,您可以選擇啟用 X 和 Y 維度的捲動功能 - 而且它在有無分頁的情況下都能完美運作。使用初始化參數 sScrollXsScrollY,只需設定您希望將表格限制到的高度和寬度即可。這兩個參數接受任何 CSS 度量單位。
  • 欄定義
    • 一般目標範例 | 類別目標範例 | 右側欄範例
    • 在 1.7 版本之前,要給予 DataTables 特定欄的指令時,必須提供一個包含詳細資訊的陣列 aoColumns,其大小必須與表格中的欄數完全匹配。當您有很多欄,或表格大小會動態變更時,有時可能會很困難。為了克服這個問題,1.7 版本引入了 aoColumnDefs,它是一個物件陣列,接受與 aoColumns 完全相同的參數,但還有額外的參數 aTargets。這個陣列允許您使用以下方式鎖定特定欄(或所有欄):
    • 字串 - 類別名稱會在該欄的 TH 上比對
    • 0 或正整數 - 從左側開始計算的欄索引
    • 負整數 - 從右側開始計算的欄索引
    • 字串 "_all" - 所有欄 (即指定預設值)。aoColumns 仍可在 1.7 版本中使用,有時也很適合,但一般來說,現在應該優先使用 aoColumnDefs。欄可以被多個欄定義鎖定,依優先順序遞減,但如果定義了 aoColumns 參數,它將具有優先權。
  • DataTables 物件擷取

    • 新增列範例 | Regex 範例
    • 在 DataTables 初始化期間建立的物件,可以用於與 API 的所有互動。因此,需要這個物件的參考,通常會儲存在全域變數中。在 DataTables 1.7 版本中,可以透過在表格上再次呼叫 $().dataTable() 函式來擷取這個物件,從而減少對全域變數的需求。關於這一點,有幾點需要注意:

      • 不使用參數呼叫 - $(...).dataTable(); - 這將只會傳回選取器的 DataTables 物件,如果沒有找到現有表格,則會建立一個新表格。
    • 使用初始化物件擷取 - $(...).dataTable({"bRetrieve":true, ...}); - 這樣做後無法變更表格參數,但能夠只使用一個 $().dataTable() 呼叫會很有用。將 bRetrieve 設定為 true,表示您確認這一點。
    • 重新初始化表格 - $(...).dataTable({"bDestroy":true, ...}); - 實際上,可以重新初始化表格,但這相當暴力。這將會銷毀舊表格,然後初始化一個新表格。
    • 否則 - 將會發出警告,告知您正在發生的事情。

使用者可見的功能

  • 表格資訊顯示中數字的格式化
    • 當處理大型數字(例如「1,000,000」)時,表格資訊顯示中數字的格式化可以幫助提高可讀性。回呼函式 fnFormatNumber 用於執行此格式化。它接受一個數字並傳回一個字串。預設值是輸入逗號作為千位分隔符號。
  • 在個別欄上進行智慧篩選
    • DataTables 中的全域篩選一直具有智慧篩選功能 - 您可以在其中以任何順序輸入單字,它們仍然會被比對。1.7 版本將此功能也引入到個別欄的篩選中。
  • 全域篩選會顯示在輸入方塊中
    • 設定全域篩選時,將正在使用的搜尋字串填入全域篩選輸入方塊中可能會很有用。這可以幫助使用者理解正在發生的事情,並減少他們變更全域篩選時的混淆。使用 fnFilter 設定篩選時,預設會啟用此功能,但可以使用 fnFilter 中的第五個參數 (布林值) 來停用它。
  • 空表格文字選項
    • 在先前版本的 DataTables 中,當表格中根本沒有可用資料時使用的「空表格」文字,與篩選太過嚴格而沒有比對結果時使用的文字之間,沒有區隔。1.7 版本引入了語言參數 sEmptyTable,當沒有資料時使用此參數。如果沒有此參數,則會像以前一樣使用 sZeroRecords。

開發人員增強功能

  • 銷毀 API 函式
    • 使用 DataTables 1.7 版本,現在可以將 HTML 頁面還原到 DataTables 初始化之前的狀態。透過呼叫新的 fnDestroy API 函式,DataTables 新增到表格的所有增強功能都將被移除,而且將繪製完整表格,使其回到基本狀態。
  • 自動偵測 HTML 資料類型,並修剪空白字元
    • 在先前版本的 DataTables 中,必須明確指出是否希望 DataTables 將欄視為「html」(使用 sType),這會影響排序和篩選。現在會自動執行此操作。此外,空白字元會自動從資料中修剪,這讓在 HTML 中格式化表格時更加彈性。
  • 現在接受 null 資料
    • JSON 結構中資料的「值」為 null 並不罕見,特別是當使用內建於 PHP、.NET 等中的 JSON 剖析器時。DataTables 過去會拒絕它,因為它不是顯示值,但現在會將其視為空字串。因此,DataTables 會接受任何資料來源的 null 值。
  • 輕鬆指定分頁長度選單
    • 長度選單自訂範例
    • 一直以來,可以使用 DataTables 中的語言選項來定義自己的長度選單,但這樣做很麻煩。新的初始化參數 aLengthMenu 使此操作更加簡單。此參數可以是選項的 1D 陣列,將用於顯示的選項和值,也可以是 2D 陣列,其中第一個位置的陣列將用作值,第二個位置的陣列將用作顯示的選項(對於「全部」之類的語言字串很有用)。
  • 啟用或停用智慧篩選
    • 當您只需要一個快速搜尋方塊時,智慧篩選對於使用者互動非常有用,但當您想要為篩選器提供規則運算式時,它可能會讓事情變得相當混亂。現在可以使用初始化物件中的 'bSmart',或 fnFilter 中的第四個參數 (布林值),在個別欄和全域篩選器上啟用和停用智慧篩選。
  • 回呼函式會以 DataTables 物件範圍執行
    • 初始化中的 API 函式範例
    • 在初始化回呼(例如 fnDrawCallback)中使用 API 函式對於資料擷取可能很有用,但過去很困難,因為您想要存取的物件在呼叫時尚未完全初始化!現在,回呼函式會以 DataTables 物件的範圍執行,這表示可以透過此 this 物件擷取所有 API 函式。

次要新功能

  • Closure 編譯器
    • DataTables 的縮小檔案版本現在使用 Google 的 Closure Compiler 編譯,而不是 YUI Compressor。這使 .min.js 檔案的大小大幅減少。使用 YUI 編譯器的 1.6.2 版本為 70K,但 1.7.0 beta 版本只有 54K,儘管有所有新功能!太棒了 - 感謝 Google。
  • 日期和數字排序現在允許空白值
    • 在以日期或數字填入的欄中出現空白值並不少見。內建排序函式現在允許這種情況,而且會保留日期或數字排序。
  • 反 IE XHR 快取
    • IE 和 GET XHR 的常見問題是它會快取傳回值,即使伺服器上的資料可能已變更。以前可以使用 fnServerData 和 POST(或隨機變數)來解決此問題,但現在 DataTables 使用 $.ajax() 的 jQuery 反快取選項(隨機變數)。
  • fnDeleteRow 中的不重新繪製選項
    • 當一次刪除多個列時,現在可以告知表格在呼叫 fnDeleteRow 時不要重新繪製(第三個參數 - 布林值),使操作速度更快。在刪除所需的列後,只需呼叫 fnDraw 來更新表格,以反映變更。
  • 格式錯誤的 JSON 警告
    • jQuery 1.4 中內建的 JSON 剖析功能,而不是使用 eval,非常出色,但當它無法剖析 JSON 字串時,它只會呼叫其錯誤函式,而不會向使用者發出警告。因此,在 DataTables 1.7 之前,這會無聲地失敗,而且可能會相當混淆。現在,DataTables 會「警告」一個錯誤,告訴您發生了什麼事。
  • 指定 Cookie 前置詞
    • 有時候,您可能希望使用自己的 Cookie 前綴來儲存狀態,而不是預設的前綴。現在可以使用 sCookiePrefix 來實現這個目的。DataTables 1.7 中的 Cookie 處理基礎架構已重新編寫,以應對大量狀態儲存 Cookie,這在之前可能會因為達到 4KiB 限制而導致伺服器錯誤。DataTables 現在使用智慧型處理來避免這種情況。

除了這些新功能之外,還有大量的錯誤修復和內部更新 - 例如,現在應該不再可能(或者至少不太可能)超過 4KiB 的 Cookie 限制,並且 fnClose 將適用於伺服器端處理。要閱讀完整的發行說明,請查看發行說明