{hero}

DataTables.Type

DataTables 資料類型物件。

描述

DataTables 資料類型物件包含有關它應如何處理不同資料類型的信息。

使用 Typescript 定義,物件具有以下結構

interface DataTable.Type {
    className?: string;
    detect: (data: any) => (boolean | null) | {
        oneOf: (data: any) => boolean,
        allOf: (data: any) => boolean,
        init: (settings: Object, column: Object, index: number) => boolean
    };
    order: {
        pre?: (data: any) => any;
        asc?: (a: any, b: any) => number;
        desc?: (a: any, b: any) => number;
    };
    render?: (data: any, type: string, row: any) => string | number | Node;
    search?: (data: any) => string;
}

屬性

以下屬性可用於資料類型物件

className

類別名稱屬性用於自動將類別指派給符合此資料類型的欄位。這可以用於樣式變更或排版。例如,內建的 num 資料類型使用 dt-right 作為類別名稱,將數值資料對齊到右側。

detect

這是 DataTables 如何判斷資料類型。從 DataTables 2.1 開始,它可以採用兩種形式,一種是具有多個參數的物件,允許精細調整類型偵測,另一種是單一函式。

我們先討論單一函式 (DataTables 2.0 以上) - 該函式將檢查傳入的資料,以判斷它是否符合預期的資料類型,如果是,則會返回 true。如果資料不符合預期的格式,則返回 false。幾乎任何資料類型都可以傳入此函式,因此必須小心 - 不能僅假設它會是字串。

舉例來說,請考慮以下偵測 IPv4 位址的方法

function (data) {
    return typeof data === 'string' && data.match(/^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$/))
        ? 'ipv4'
        : null;
}

從 DataTables 2.1 開始,也可以使用具有 oneOfallOfinit 函式的物件

  • allOf - 這與上面的函式相同。欄位中的所有資料點都必須通過此函式,才允許欄位採用此資料類型。
  • oneOf - 欄位中至少有一個資料點必須通過此函式,才允許欄位採用此資料類型。
  • init - 在類型偵測開始時執行,以查看是否可以根據欄位(而非資料)的屬性為欄位指派資料類型。

order

DataTables 中的排序是由為類型定義的 preascdesc 函式完成的

  • pre - 預先格式化方法。用於將格式化的資料轉換為可排序的資料
  • asc - 升序排序方法
  • desc - 降序排序方法

這些函式都是可選的,您可以使用以下組合之一

  • pre - 排序將使用 DataTables 的預設排序在返回的資料上完成。
  • ascdesc - 標準 Javascript 排序函式
  • 全部三個 - 預先格式化的資料將傳遞到自訂排序方法中。

強烈建議您提供 pre 方法,如果您需要將資料從原始資料類型轉換為排序方法將使用的類型。這是因為 pre 函式在每次資料點排序時僅執行一次,而 ascdesc 排序方法可能在每次資料點排序時被呼叫多次。

舉例來說,請考慮以下排序資料類型定義,它用於對沒有 the 前綴的資料進行排序(常用於書籍和電影)。在這裡,我們只需要使用 pre 解格式器(大多數排序定義都是這種情況)

function (data) {
    return data.replace(/^ the/i, '');
}

render

渲染函式可以用於將資料轉換成不同形式,以進行不同的正交動作,但特別適用於顯示格式化。如果尚未為欄位提供渲染函式(columns.render),則此處定義的函式將自動應用於資料類型。

當您事先不知道輸入資料的資料類型,並且您想要根據最終使用者的本地化偏好來格式化資料時,這特別有用。例如,在美國,日期應為 M/D/Y 格式,而在世界其他大部分地區則為 D/M/Y 格式。

以下兩個指令將內建的渲染器指派給 datenum(數字)資料類型,以便在判斷欄位符合該類型時自動渲染。它們會自動以本地化的方式為最終使用者格式化資料

DataTable.type('date', 'render', DataTable.render.date());
DataTable.type('num', 'render', DataTable.render.number());

search

搜尋函式用於將輸入資料轉換為字串,當 DataTables 為最終使用者執行任何搜尋時,將會比對該字串。以這種方式來看,它與 pre 排序解格式器非常相似,因為它會預先處理資料。

這樣做可能很有用,可以去除不應搜尋的資料,例如 HTML 標籤,或者可以用於為搜尋詞提供冗餘,例如使用者可能會搜尋顯示的帶有或不帶有空格的電話號碼。以下範例示範了這一點

function (data) {
    // Return original data and also remove any non-numeric data, so
    // '555-2368' would be returned as '555-2368 5552368' allowing
    // either form to be searched for
    return data + ' ' + data.replace(/[^\d]/g, '');
}

進一步資訊

使用以下資源進一步探索 DataTables 資料類型