To stare pytanie z wieloma odpowiedziami, które działają, ale znalazłem rozwiązanie wykorzystujące to, co zapewnia Magento (od wersji 2.1.0), bez potrzeby rozszerzania komponentów. Ponieważ wiele pytań zostało oznaczonych jako duplikaty i skierowanych tutaj, pomyślałem, że dobrze byłoby podać informacje na temat tej opcji.
Wszystkie rozszerzane elementy interfejsu użytkownika elementu formularza Magento_Ui/js/form/element/abstract.jsmają switcherConfigustawienie dostępne do takich celów, jak ukrywanie / wyświetlanie elementów, a także innych działań. switcherSkładnik można znaleźć w Magento_Ui / js / / postać przełącznika do ciekawy. Przykłady tego można znaleźć w pliku sales_rule_form.xml i catalog_rule_form.xml . Oczywiście, jeśli używasz już własnego niestandardowego komponentu, możesz go nadal używać, dopóki komponent ostatecznie się rozszerzy, abstractco wydaje się być przypadkiem na podstawie przykładowego kodu podanego w pytaniu.
Teraz bardziej konkretny przykład odpowiedzi na pierwotne pytanie.
W Namespace/ModuleName/view/adminhtml/ui_component/your_entity_form.xmlwystarczy po prostu dodać do pola, settingsktóre kontroluje (tj. Pole, które określa, które pola są ukryte / widoczne). W twoim przykładzie byłoby to 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>
Rozwalmy to trochę. switcherSkładnik zawiera tablicę rules, która jest co budujemy tutaj. Każdy <rule>ma nazwę, która jest liczbą w tym przykładzie. Ta nazwa to klucz / indeks tablicy dla tego elementu. Używamy liczb jako indeksów tablic. Ciągi też powinny działać, ale nie przetestowałem tej teorii .
AKTUALIZACJA - Jak wspomniano w @ChristopheFerreboeuf w komentarzach, ciągi znaków nie działają tutaj. Są to tablice i powinny zaczynać się od 0, a nie ciągów znaków lub 1.
Wewnątrz każdego ruleprzekazujemy dwa argumenty.
value- Jest to wartość, field1która powinna uruchomić actionszdefiniowaną poniżej.
actions- Tutaj mamy kolejną tablicę. Są to akcje, które zostaną uruchomione, gdy zostaną spełnione warunki tej reguły. Ponownie, actionnazwa każdego z nich jest tylko indeksem / kluczem tablicy tego elementu.
Teraz każdy actionma również dwa argumenty (z opcjonalnym trzecim).
target- To jest element, którym chcesz manipulować w ramach tej akcji. Jeśli nie jesteś zaznajomiony ze sposobem tworzenia nazw elementów ui_component w Magento, możesz przeczytać artykuł Alana Storma . Zasadniczo jest to jak {component_name}.{component_name}.{fieldset_name}.{field_name}w tym przykładzie.
callback- Oto działania, które należy podjąć w odniesieniu do wyżej wymienionych target. To wywołanie zwrotne powinno być funkcją dostępną dla elementu docelowego. W naszym przykładzie użyto hidei show. W tym miejscu możesz zacząć rozszerzać dostępne funkcje. catalog_rule_form.xmlPrzykład wspomniałem wcześniej zastosowania setValidation, jeśli chcesz zobaczyć inny przykład.
- Możesz także dodać
<params>do każdego action, kto do nich wzywa. Możesz to również zobaczyć w catalog_rule_form.xmlprzykładzie.
Wreszcie ostatni element wewnątrz switcherConfigjest <enabled>true</enabled>. Powinno to być dość proste, bo logiczne jest włączenie / wyłączenie właśnie zaimplementowanej funkcji przełącznika.
I skończyliśmy. Więc korzystając z przykładu powyżej, co powinieneś zobaczyć to pole field2Depend1wyświetlane w przypadku wybrania opcji z wartości 2na field1i field3Depend1wyświetlona, jeśli wybierzesz opcję za pomocą wartości 3.
Ja testowałem ten przykład przy użyciu tylko hidei showna wymaganym zakresie i wydaje się, aby wziąć pod uwagę widoczność do walidacji. Innymi słowy, jeśli field2Depend1jest wymagany, będzie wymagany tylko wtedy, gdy będzie widoczny. Nie ma potrzeby dalszej konfiguracji, aby to działało.
Mam nadzieję, że zapewnia to pomoc każdemu, kto szuka bardziej gotowego rozwiązania.