Это старый вопрос с несколькими ответами, которые работают, однако я нашел решение, использующее то, что предоставляет 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требуется, это потребуется только тогда, когда оно видно. Нет необходимости в дальнейшей настройке, чтобы это работало.
Надеюсь, что это поможет некоторым, кто ищет более готовое решение.