Це давнє запитання з численними відповідями, які працюють, однак я знайшов рішення, використовуючи те, що надає Magento (станом на 2.1.0) без необхідності розширення компонентів. Оскільки декілька питань були позначені як повторювані та спрямовані тут, я подумав, що було б корисно надати деяку інформацію про цей варіант.
Для всіх компонентів форми елемента ui, які розширюються, 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є також два аргументи (з додатковим 3-м).
target- Це елемент, яким ви хочете маніпулювати в рамках цієї дії. Якщо ви не знайомі з тим, як імена елементів ui_component складаються в Magento, ви можете ознайомитися зі статтею Алана Шторма . Це в основному щось подібне {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це потрібно, воно буде потрібно лише тоді, коли його видно. Для цього не потрібно додаткової конфігурації.
Сподіваюся, що це допоможе для тих, хто шукає більш нестандартне рішення.