Це давнє запитання з численними відповідями, які працюють, однак я знайшов рішення, використовуючи те, що надає 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
це потрібно, воно буде потрібно лише тоді, коли його видно. Для цього не потрібно додаткової конфігурації.
Сподіваюся, що це допоможе для тих, хто шукає більш нестандартне рішення.