wavevision / dependent-selectbox
为Nette表单提供的依赖选择框组件。
Requires
- php: >=7.4
- nette/forms: ^3.0
- wavevision/utils: ^2.1
Requires (Dev)
- latte/latte: ^2.5
- nette/application: ^3.0
- nette/bootstrap: ^3.0
- php-coveralls/php-coveralls: ^2.4
- phpstan/extension-installer: ^1.0
- phpstan/phpstan-nette: ^0.12.9
- phpunit/phpunit: ^9.4
- wavevision/coding-standard: ^6.0
- dev-master
- 3.0.5
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.3.2
- 2.3.1
- 2.3.0
- 2.2.6
- 2.2.5
- 2.2.4
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.1
- 2.1.0
- 2.0.1
- 2.0.0
- 1.3.7
- 1.3.6
- 1.3.5
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.10
- 1.2.9
- 1.2.8
- 1.2.7
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.0
- 1.0.1
- 1.0.0
- dev-dependabot/npm_and_yarn/json5-1.0.2
- dev-dependabot/npm_and_yarn/qs-6.5.3
- dev-dependabot/npm_and_yarn/decode-uri-component-0.2.2
- dev-dependabot/npm_and_yarn/loader-utils-1.4.2
- dev-dependabot/npm_and_yarn/terser-4.8.1
- dev-dependabot/npm_and_yarn/shell-quote-1.7.3
- dev-dependabot/composer/guzzlehttp/guzzle-7.4.5
- dev-dependabot/composer/guzzlehttp/psr7-2.2.1
- dev-dependabot/npm_and_yarn/minimist-1.2.6
- dev-dependabot/npm_and_yarn/nanoid-3.2.0
- dev-dependabot/composer/latte/latte-2.10.8
- dev-dependabot/npm_and_yarn/tmpl-1.0.5
- dev-dependabot/npm_and_yarn/tar-6.1.11
- dev-dependabot/npm_and_yarn/path-parse-1.0.7
- dev-dependabot/npm_and_yarn/postcss-7.0.36
- dev-dependabot/npm_and_yarn/trim-newlines-3.0.1
- dev-dependabot/npm_and_yarn/ws-7.4.6
- dev-dependabot/npm_and_yarn/browserslist-4.16.6
- dev-development
This package is auto-updated.
Last update: 2024-08-07 13:46:25 UTC
README
依赖选择框
为nette/forms提供,具有naja客户端扩展的依赖选择框组件。
特性
- 严格的类型
- 在任何表单上工作,无需自定义渲染器(无需片段)
- 支持表单容器(无限深度,适用于选择框及其父级)
- 由TypeScript和Naja提供客户端支持,可触发事件以便您可以附加监听器
- 条件父级(当某些其他控件具有特定值时,使表单控件成为选择框的父级)
安装
使用Composer获取Nette表单组件
composer require wavevision/dependent-selectbox
通过Yarn安装客户端
yarn add @wavevision/dependent-selectbox
或npm
npm install --save @wavevision/dependent-selectbox
用法
服务器端
创建一个将成为Wavevision\DependentSelectBox\Form\Form
实例的表单。
如果您不想或不能从我们的基类继承,只需确保您创建的表单使用Wavevision\DependentSelectBox\Form\DependentForm
特性。
您的表单还应使用Wavevision\DependentSelectBox\Form\DependentContainer
,以便其容器也扩展为依赖选择框,但如果您已经有了自己的Nette\Forms\Container
实现,只需确保容器使用Wavevision\DependentSelectBox\Form\DependentControl
特性。
之后,您的表单及其容器将通过addDependentSelectBox
方法进行扩展。此方法接受以下参数
该方法返回一个Wavevision\DependentSelectBox\DependentSelectBox
实例。
使用表单的推荐方式是在Control
组件中使用。
use Nette\Application\UI\Control; use Nette\Application\UI\Presenter; use Wavevision\DependentSelectBox\DependentComponent; use Wavevision\DependentSelectBox\DependentData; use Wavevision\DependentSelectBox\DependentValues; use Wavevision\DependentSelectBox\Form\Form; class FormComponent extends Control { // add 'loadDependenData' signal and a few utilities use DependentComponent; public function __construct() { $this->monitor(Presenter::class, function (): void { // setup form in component - optionally pass form name (default 'form') $this->dependentComponentSetup(); if ($this->hasReceivedDependentSignal()) { // if 'loadDependenData' signal received, do anything extra we need } }); } protected function createComponentForm(): Form { // create your form as you are used to $form->addDependentSelectBox('name', 'Label', $form['someParentControl']) ->setDependentCallback(function (DependentValues $values): DependentData { // get ArrayHash values, if you perfer array, use getRawValues $formattedValues = $values->getValues(); $data = new DependentData(); if ($formattedValues->someParentControl === 'someDependentValue') { $data->setItems(['firstItem' => 'firstValue']); } return $data; }) // make the select box disabled when no values have been loaded ->setDisabledWhenEmpty() // if loaded values contain only one item, select it so the user does not have to ->setAutoSelectSingleValue() // if 'someOtherControl' has 'someValue', treat 'someControl' as parent ->addConditionalParent($form['someControl'], $form['someOtherControl'], 'someValue'); // add form handlers etc. return $form; } }
注意:您也可以在
Presenter
中使用表单,唯一的限制是您在每个页面上只能有一个依赖表单,如下所示。如果您将表单包裹在组件中(每个都使用DependentComponent
特性),那么您就可以在单个页面上使用尽可能多的表单。
客户端
有多种方法将客户端集成到您的项目中。
1. 将依赖选择框注册为Naja扩展
import naja from 'naja'; import DependentSelectBox from '@wavevision/dependent-selectbox'; naja.registerExtension(new DependentSelectBox()); // add other extensions, initialize etc.
如特性中所述,扩展会发出您可以附加监听器的事件。
这两个事件监听器都会收到一个包含detail
的CustomEvent
对象,其中具有以下属性
第一个事件还包含request
属性,它是一个包含以下内容的对象
后者包含一个包含以下内容的response
对象,其中的键是更新选择框的HTML id
属性,值是包含以下属性的对象
请参阅Naja文档以获取有关其扩展的更多信息。
2. 导入包含Naja的捆绑版本
如果您在其他地方的项目中不使用Naja并且不想设置它,这是您的选择。
⚠️ 警告:如果使用,这可能与其他Nette AJAX库冲突!
import '@wavevision/dependent-selectbox/dist/dependentSelectBox.all';
3. 在script
标签中直接使用它
仅适用于老式人士 😎。
<script src="/path/to/assets/dependentSelectBox.all.js"></script>