Это старый вопрос с несколькими ответами, которые работают, однако я нашел решение, использующее то, что предоставляет Magento (начиная с 2.1.0), без необходимости расширения компонентов. Поскольку несколько вопросов были помечены как дублирующие и направлены сюда, я подумал, что было бы полезно предоставить некоторую информацию по этому варианту.
Все расширяемые компоненты пользовательского интерфейса элемента формы Magento_Ui/js/form/element/abstract.js
имеют switcherConfig
настройку, доступную для таких целей, как скрытие / отображение элементов, а также другие действия. switcher
Компонент может быть найден в Magento_Ui / JS / форме / коммутатора для любопытных. Вы можете найти примеры его использования в sales_rule_form.xml и catalog_rule_form.xml . Конечно, если вы уже используете свой собственный пользовательский компонент, вы можете использовать его до тех пор, пока ваш компонент в конечном итоге расширяетсяabstract
что, как представляется, основано на примере кода, приведенном в вопросе.
Теперь для более конкретного примера, чтобы ответить на оригинальный вопрос.
В Namespace/ModuleName/view/adminhtml/ui_component/your_entity_form.xml
вам просто нужно добавить следующие строки в поле х , settings
что делает контрольный (то есть поле , которое определяет , какие поля скрыты / видны). В вашем примере это будет field1
.
<field name="field1">
<argument name="data" xsi:type="array">
...
</argument>
<settings>
<switcherConfig>
<rules>
<rule name="0">
<value>2</value>
<actions>
<action name="0">
<target>your_entity_form.your_entity_form.entity_information.field2Depend1</target>
<callback>show</callback>
</action>
<action name="1">
<target>your_entity_form.your_entity_form.entity_information.field3Depend1</target>
<callback>hide</callback>
</action>
</actions>
</rule>
<rule name="1">
<value>3</value>
<actions>
<action name="0">
<target>your_entity_form.your_entity_form.entity_information.field2Depend1</target>
<callback>hide</callback>
</action>
<action name="1">
<target>your_entity_form.your_entity_form.entity_information.field3Depend1</target>
<callback>show</callback>
</action>
</actions>
</rule>
</rules>
<enabled>true</enabled>
</switcherConfig>
</settings>
</field>
Давайте разберемся с этим немного. switcher
Компонент содержит массив , rules
который является то , что мы строим здесь. У каждого <rule>
есть имя, которое является числом в этом примере. Это имя является ключом / индексом массива для этого элемента. Мы используем числа в качестве индексов массивов. Струны тоже должны работать, но я не проверял эту теорию .
ОБНОВЛЕНИЕ - Как упомянуто @ChristopheFerreboeuf в комментариях, здесь не работают строки. Это массивы и должны начинаться с 0
, а не со строк или 1.
Внутри каждого rule
мы передаем два аргумента.
value
- это значение, field1
которое должно сработать, как actions
указано ниже.
actions
- Здесь у нас есть еще один массив. Это действия, которые должны запускаться при выполнении условий этого правила. Опять же, имя каждого action
- это просто индекс / ключ массива этого элемента.
Теперь у каждого action
есть два аргумента (с необязательным третьим).
target
- Это элемент, которым вы хотите манипулировать в рамках этого действия. Если вы не знакомы с тем, как составляются имена элементов ui_component в Magento, вы можете ознакомиться со статьей Alan Storm . Это в основном что-то вроде {component_name}.{component_name}.{fieldset_name}.{field_name}
этого примера.
callback
- Вот действия, которые необходимо предпринять по вышеупомянутому target
. Этот обратный вызов должен быть функцией, доступной для целевого элемента. Наш пример использует hide
и show
. Здесь вы можете начать расширять доступную функциональность. catalog_rule_form.xml
Пример , который я упоминал ранее , использует , setValidation
если вы хотите увидеть другой пример.
- Вы также можете добавить
<params>
к любому, action
что призывает их. Вы можете увидеть это и в catalog_rule_form.xml
примере.
Наконец, последний внутренний элемент switcherConfig
является <enabled>true</enabled>
. Это должно быть довольно просто, это логическое значение для включения / выключения функции коммутатора, которую мы только что реализовали.
И мы сделали. Таким образом , используя приведенный выше пример , что вы должны увидеть это поле field2Depend1
отображается , если вы выбираете опцию со значением 2
на field1
, и field3Depend1
отображается , если вы выбираете опцию со значением 3
.
Я протестировал этот пример, используя только hide
и show
в обязательном поле, и он, похоже, учитывает видимость для проверки. Другими словами, если field2Depend1
требуется, это потребуется только тогда, когда оно видно. Нет необходимости в дальнейшей настройке, чтобы это работало.
Надеюсь, что это поможет некоторым, кто ищет более готовое решение.