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.js
mają switcherConfig
ustawienie dostępne do takich celów, jak ukrywanie / wyświetlanie elementów, a także innych działań. switcher
Skł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, abstract
co 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.xml
wystarczy po prostu dodać do pola, settings
któ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ę. switcher
Skł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 rule
przekazujemy dwa argumenty.
value
- Jest to wartość, field1
która powinna uruchomić actions
zdefiniowaną poniżej.
actions
- Tutaj mamy kolejną tablicę. Są to akcje, które zostaną uruchomione, gdy zostaną spełnione warunki tej reguły. Ponownie, action
nazwa każdego z nich jest tylko indeksem / kluczem tablicy tego elementu.
Teraz każdy action
ma 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 hide
i show
. W tym miejscu możesz zacząć rozszerzać dostępne funkcje. catalog_rule_form.xml
Przykł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.xml
przykładzie.
Wreszcie ostatni element wewnątrz switcherConfig
jest <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 field2Depend1
wyświetlane w przypadku wybrania opcji z wartości 2
na field1
i field3Depend1
wyświetlona, jeśli wybierzesz opcję za pomocą wartości 3
.
Ja testowałem ten przykład przy użyciu tylko hide
i show
na wymaganym zakresie i wydaje się, aby wziąć pod uwagę widoczność do walidacji. Innymi słowy, jeśli field2Depend1
jest 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.