dakujem / selectoo
SelectBox & MultiSelectBox 混合输入,具有懒加载和异步加载选项的能力,可用于与 Select2、Selectize、Chosen 和类似 UI 库配合使用。
Requires
- php: >=7.1
- nette/forms: ^3
README
SelectBox & MultiSelectBox 混合输入,具有懒加载和异步加载选项的能力,可用于与 Select2、Selectize、Chosen 和类似 UI 库配合使用。
Selectoo 的目标是提供一个灵活的工具,用于创建可重用的选择输入。
特性
- 支持单选或多选模式
- 单选模式大致等同于
SelectBox
- 多选模式大致等同于
MultiSelectBox
- 单选模式大致等同于
- 使用回调函数按需(懒加载)加载选项
- 选项可以异步加载,使用 AJAX
- 只有当真正需要时才加载选项
- 可以使用 UI 库或自定义脚本进行皮肤化(见下文)
- 依赖/级联输入
用法/用例
可重用 的输入,具有特定配置
- 带有特殊配置选项和其他应用程序逻辑的 select2 皮肤(或其他库)输入
- 带有 AJAX 的自动完成
- 标签
- 在选中时修改 DOM 的自定义 UI 脚本
- 级联/依赖输入
请参阅包含的示例以获取更多信息。
配置 Selectoo 输入
创建一个具有固定选项的(多)选择框
$items = ['a', 'b', 'c', 'd',]; $input = new Selectoo($label, $items, $multiselect);
或一个按需(懒加载)加载选项的(多)选择框。
$input = new Selectoo($label, [$repository, 'fetchAll'], $multiselect);
可选地附加并配置一个引擎
$input->setEngine(new Select2Engine);
。
$input->getEngine() ->placeholder('Select a user', true) ->width('width: 100%', true) ->closeOnSelect(false, true) ;
Select2Engine
使用魔法选项(或 setOption
方法)进行配置。魔法方法(或选项名称)的名称表示 Select2 配置选项。
懒加载选项 & AJAX
当 Selectoo 实例给出 "item callback" 可调用对象而不是项目数组时,使用懒加载。可调用对象应返回一个项目列表。
项目回调还作为值的验证器。它接收原始值作为第一个参数(以及输入实例作为第二个参数)。回调应返回一个可能的值数组(这些是项目),其形式与设置到 SelectBox
或 MultiSelectBox
输入中的项目完全相同。然后,将原始值与返回的项目进行比较和筛选。这种方法确保了数据的有效性。
如果您使用远程项目加载(ajax/api 加载选项),则非常重要设置此回调。
请参阅 示例 AJAX 演示者,包括输入工厂和用户存储库示例。
AJAX 配置可以非常简单
(new Select2Engine()) ->ajax('{url: "' . $link . '", dataType: "json" }') ;
支持的 UI 库
Selectoo 使用 "脚本引擎" 生成 JavaScript UI 脚本以及 HTML 输入元素。可以通过调用 $selectoo->setEngine($engine)
将任何脚本引擎附加到 Selectoo
实例。
- select2/select2
- 使用
Select2Engine
实例
- 使用
- selectize/selectize.js
- 待实施
- harvesthq/chosen
- 待实施
可以轻松创建实现 ScriptEngineInterface
接口的自定义引擎。
工厂
为了实现最佳的可重用性,我强烈建议使用工厂来处理具有更多逻辑的输入,通常这些涉及从存储或外部资源获取数据以及 JS/UI 配置、处理事件和值验证。
请参阅简单示例
脚本管理
由引擎生成的脚本可以通过管理例程进行后处理和/或收集。这种方法可以用来收集和将脚本放置在页面末尾,以及解决在页面内编写脚本并在HTML文件末尾加载jQuery时出现的问题。
有关更多信息,请参阅脚本管理示例。
依赖选择/级联输入
示例正在准备中。
通常需要什么
- 管理更改事件的UI脚本
- Select2配置,将主输入的值发送到AJAX请求的URL中
- 基于值的仓库过滤
- 接收主值并使用URL中的值发起仓库请求的API端点
- “项目回调”也使用来自
表单
的值发起仓库请求
请注意,当调用项目回调时,可以使用
表单
对象中的值来检查主值
上面所说的“主值”是指Selectoo实例所依赖的输入的值
按照这些步骤,可以创建依赖的Selectoo输入并验证值。
示例
请参阅仓库中包含的示例,以更好地了解Selectoo何时有用。
与Nette SelectBox & MultiSelectBox相比的显著差异
- 禁用Selectoo输入不会修改/重置其值,因此可以在不丢失信息的情况下重新启用
- 禁用输入的处理方式不同 - 即使输入(或项目)被禁用,也会始终加载原始值。在调用
getValue
方法时将过滤禁用值
要求
您还应该安装Select2
版本4
以使用Select2Engine
,请参阅Select2文档。
您可以在几分钟内安装任何其他选择输入“皮肤”并为其实现自己的引擎。
Selectoo也可以不使用此类“皮肤”。