SearchBuilder.Condition
搜索条件插件结构。
请注意 - 该属性需要 SearchBuilder 扩展才能用于 DataTables。
说明
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 条件对象上有以下属性
conditionName
这定义了要设置的条件的显示值(也就是说,用户在条件中看到的 select
列表中的内容)。它应该是短的并且具有描述性,例如“等于”、“介于”等。
init
此函数设置要在搜索条件的输入区域中显示的 DOM 元素,允许根据数据类型和特定条件对其进行定制。
此函数返回一个 HTML 元素或 jQuery 对象,用作输入。它需要三个参数。
that
要检查的标准实例。fn
必须在用于触发搜索的事件中调用的回调函数。preDefined
(可选)。对正在创建的元素应该应用的任何值。
函数的内部取决于你希望创建的功能,但如以下内容所讨论的,有很多事情必须这样做。
首先,如果要收集值,函数必须返回一个节点、一个 jQuery 对象或一个 jQuery 对象数组,这些节点可以接受用户输入。
其次,fn
参数是一个回调函数,必须在应当进行搜索的任何时间触发。一般来说,该函数会在输入元素上的事件侦听器中使用。例如,使用了 select
和 input
元素的条件在 input
事件上调用函数。
第三,该函数必须提供一种方法来设置 preDefined
选项。该系统在 SearchBuilder 内部使用,不仅仅是用于设置初始预定义的选项(见 searchBuilder.preDefined
)。由于在添加、移除和移动标准时会发生很多重新绘制,因此 SearchBuilder 需要一种方式来重新为输入元素分配值。
inputValue
此函数是一个 getter。它返回一个值数组,用于根据从由 init
函数(以上)设置的 DOM 结构中读取到的这些值与表中的数据进行比较。它采用一个参数
el
属于此标准的 value 元素数组。
在此返回的值会传给 search
函数(见下文)。通常,这些值将从 init
函数创建的元素中获取,尽管对于empty 等某些条件,获取方式可能不同。
inputValue
独立成一个函数,因此它每个绘图操作只运行一次,而不是在每一行中运行。这样做是为了提升效率和性能。
isInputValid
此函数确定用户输入搜索条件是否有效。它接受 2 个参数。
val
属于此条件的值元素的数组。它们在init
中设置。that
要检查的标准实例。
必须返回一个布尔值——true
表示该值有效,搜索可以使用此输入;false
表示该值无效。
此函数的目的是决定是否存在足够的数据来将此条件包含在搜索筛选条件中。它并不像总是应用所有过滤器那么简单。这是因为,当添加新的条件后,表格将不会显示任何结果。
search
此函数定义条件的比较函数——获取 DataTable 和用户输入中的数据并确定是否将行包括在结果集中。
它接受三个参数。
value
DataTable 中存在的值。comparison
一个值数组,每个索引代表value
要过滤比较的值输入的数量。that
条件实例,如果需要使用任何内部属性。
它必须返回一个布尔值:如果该行要包含在结果中则返回 true
,否则返回 false
。此函数可以对这些值执行任意操作来确定是否通过所需的条件,但应针对性能进行优化。此函数是此条件的搜索操作的核心。