Dies ist eine alte Frage mit mehreren Antworten, die funktionieren. Ich habe jedoch eine Lösung gefunden, die Magento (ab 2.1.0) verwendet, ohne dass Komponenten erweitert werden müssen. Da mehrere Fragen als doppelt markiert und hier gerichtet wurden, hielt ich es für vorteilhaft, einige Informationen zu dieser Option bereitzustellen.
Für alle erweiterten Komponentenelement-UI-Komponenten steht Magento_Ui/js/form/element/abstract.jseine switcherConfigEinstellung zur Verfügung, die zum Ausblenden / Anzeigen von Elementen sowie für andere Aktionen verwendet werden kann. Die switcherKomponente finden Sie unter Magento_Ui / js / form / switcher für Neugierige. Beispiele dafür finden Sie in sales_rule_form.xml und catalog_rule_form.xml . Wenn Sie bereits eine eigene benutzerdefinierte Komponente verwenden, können Sie diese natürlich weiterhin verwenden, solange sich Ihre Komponente schließlich erweitert. Dies abstractscheint auf der Grundlage des in der Frage angegebenen Beispielcodes der Fall zu sein.
Nun zu einem genaueren Beispiel zur Beantwortung der ursprünglichen Frage.
In müssen Namespace/ModuleName/view/adminhtml/ui_component/your_entity_form.xmlSie lediglich Folgendes zu den Feldern hinzufügen settings, die das Controlling ausführen (dh das Feld, das bestimmt, welche Felder ausgeblendet / sichtbar sind). In Ihrem Beispiel wäre dies 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>
Lassen Sie es uns ein wenig aufschlüsseln. Die switcherKomponente enthält ein Array, von rulesdem wir hier bauen. Jeder <rule>hat einen Namen, der in diesem Beispiel eine Nummer ist. Dieser Name ist der Array-Schlüssel / Index für dieses Element. Wir verwenden Zahlen als Array-Indizes. Strings sollten auch funktionieren, aber ich habe diese Theorie nicht getestet .
UPDATE - Wie von @ChristopheFerreboeuf in den Kommentaren erwähnt, funktionieren Zeichenfolgen hier nicht. Dies sind Arrays und sollten mit beginnen 0, nicht mit Strings oder 1.
In jedem übergeben rulewir zwei Argumente.
value- Dies ist der Wert, der field1die actionsunten definierte auslösen soll .
actions- Hier haben wir ein anderes Array. Dies sind die Aktionen, die ausgelöst werden, wenn die Bedingungen dieser Regel erfüllt sind. Auch hier ist jeder actionName nur der Array-Index / Schlüssel dieses Elements.
Jetzt hat jeder actionauch zwei Argumente (mit einem optionalen dritten).
target- Dies ist das Element, das Sie im Rahmen dieser Aktion bearbeiten möchten. Wenn Sie nicht wissen, wie die Namen von ui_component-Elementen in Magento zusammengesetzt sind, können Sie den Artikel von Alan Storm lesen . Es ist im Grunde so etwas wie {component_name}.{component_name}.{fieldset_name}.{field_name}in diesem Beispiel.
callback- Hier ist die Maßnahme zu den oben genannten target. Dieser Rückruf sollte eine Funktion sein, die für das Zielelement verfügbar ist. Unser Beispiel verwendet hideund show. Hier können Sie die verfügbaren Funktionen erweitern. Das catalog_rule_form.xmlzuvor erwähnte Beispiel wird verwendet, setValidationwenn Sie ein anderes Beispiel sehen möchten.
- Sie können auch
<params>zu jedem hinzufügen action, der sie anfordert. Sie können dies auch im catalog_rule_form.xmlBeispiel sehen.
Schließlich ist der letzte Punkt im Inneren switcherConfigist <enabled>true</enabled>. Dies sollte ziemlich einfach sein, es ist ein Boolescher Wert zum Aktivieren / Deaktivieren der Switcher-Funktionalität, die wir gerade implementiert haben.
Und wir sind fertig. So am Beispiel über das, was sollten Sie sehen , ist Feld field2Depend1angezeigt , wenn Sie eine Option mit dem Wert wählen 2auf field1und field3Depend1angezeigt , wenn Sie eine Option mit dem Wert wählen 3.
Ich habe dieses Beispiel nur mit hideund showin einem erforderlichen Feld getestet und es scheint die Sichtbarkeit für die Validierung zu berücksichtigen. Mit anderen Worten, wenn dies field2Depend1erforderlich ist , ist es nur erforderlich, wenn es sichtbar ist. Es ist keine weitere Konfiguration erforderlich, damit dies funktioniert.
Ich hoffe, dies bietet Hilfe für alle, die nach einer sofort einsatzbereiten Lösung suchen.