SearchBuilder.Condition
搜尋條件外掛程式結構。
請注意 - 此屬性需要 DataTables 的 SearchBuilder 擴充功能。
說明
SearchBuilder 為 DataTables 使用的每個資料類型提供了一組不同的邏輯運算。該系統使用一組外掛程式,這些外掛程式會附加到類型和條件。它在 SearchBuilder 內部使用,也可用於使用自訂搜尋運算自訂 SearchBuilder。
此類型描述 SearchBuilder 外掛程式所需的物件結構和屬性。
使用Typescript 定義,該物件具有以下結構
export interface ICondition {
/** Display name */
conditionName: string | ((dt: any, i18n: any) => string);
/** Initialisation */
init: (
that: Criteria,
fn: (thatAgain: Criteria, el: JQuery<HTMLElement>) => void,
preDefined?: string[]
) => JQuery<HTMLElement> | Array<JQuery<HTMLElement>> | void;
/** Get the search term's value */
inputValue: (el: JQuery<HTMLElement>) => string[] | void;
/** Determine if an input is valid */
isInputValid: (val: Array<JQuery<HTMLElement>>, that: Criteria) => boolean;
/** Search logic */
search: (value: string, comparison: string[], that: Criteria) => boolean;
}
屬性
SearchBuilder Condition 物件上可使用以下屬性
conditionName
這定義要設定的條件的顯示值(即使用者在條件 select
清單中看到的值)。它應該簡短且具描述性,例如「等於」、「介於」等。
init
此函數設定要顯示在搜尋條件輸入區域中的 DOM 元素,使其可以根據所討論的資料類型和條件進行客製化。
此函數會傳回 HTML 元素或 jQuery 物件,將用作輸入。它接受 3 個參數。
that
正在檢查的條件實例。fn
回呼函數,必須在觸發搜尋的所需事件時呼叫。preDefined
(選用)。應套用至所建立元素的任何值。
函數的內部結構取決於您要建立的功能,儘管必須發生許多事情,如下所述。
首先,如果需要收集值,函數必須傳回節點、jQuery 物件或可以接受使用者輸入的 jQuery 物件陣列。
其次,fn
參數是回呼函數,必須在應發生搜尋時觸發。通常,這將用於輸入元素上的事件監聽器中。例如,使用 select
和 input
元素的條件會在 input
事件上呼叫函數。
第三,函數必須提供一種設定 preDefined
選項的方法。此系統在內部由 SearchBuilder 使用,而不僅僅是用於設定初始 preDefined 選項(請參閱 searchBuilder.preDefined
)。由於在新增、移除和移動條件時會有大量重繪,因此 SearchBuilder 需要一種方法將值重新分配給輸入元素。
inputValue
此函數是 getter。它會傳回一個值的陣列,這些值將用於與表格中的資料進行比較,並從 init
函數(如上所示)設定的 DOM 結構中讀取這些值。它接受單一參數
el
屬於此條件的值元素陣列。
這裡傳回的值將會傳遞到 search
函數中(請參閱下文)。通常,這些值將會從 init
函數建立的元素中取得,儘管對於某些條件(例如空)來說,可能會有所不同。
inputValue
在一個單獨的函數中,因此它每次繪圖操作只會執行一次,而不是在每一列上執行。這樣做是為了效率和效能。
isInputValid
此函數決定使用者對搜尋條件的輸入是否有效。它接受 2 個參數。
val
屬於此條件的值元素陣列。這些在init
中設定。that
正在檢查的條件實例。
它必須傳回一個布林值 - true
表示值有效且搜尋可以使用此輸入,或 false
表示值無效。
此函數的目的是決定是否存在足夠的資料,以將此條件包含在搜尋篩選中。這不像一直套用所有篩選器那麼簡單。這是因為在新增新條件時,表格將不會顯示任何結果。
search
此函數定義條件的比較函數 - 從 DataTable 和使用者輸入中取得資料,並判斷是否應將該列包含在結果集中。
它接受三個參數。
value
DataTable 中存在的值。comparison
值陣列,每個索引表示要篩選value
的輸入值數量。that
條件實例,如果需要其任何內部屬性。
它必須傳回一個布林值:如果該列要包含在結果中,則為 true
,否則為 false
。此函數可以對這些值執行任何操作,以決定它是否通過所需的條件,儘管它應針對效能進行最佳化。此函數是該條件搜尋行為的關鍵。