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.js
eine switcherConfig
Einstellung zur Verfügung, die zum Ausblenden / Anzeigen von Elementen sowie für andere Aktionen verwendet werden kann. Die switcher
Komponente 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 abstract
scheint 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.xml
Sie 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 switcher
Komponente enthält ein Array, von rules
dem 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 rule
wir zwei Argumente.
value
- Dies ist der Wert, der field1
die actions
unten 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 action
Name nur der Array-Index / Schlüssel dieses Elements.
Jetzt hat jeder action
auch 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 hide
und show
. Hier können Sie die verfügbaren Funktionen erweitern. Das catalog_rule_form.xml
zuvor erwähnte Beispiel wird verwendet, setValidation
wenn 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.xml
Beispiel sehen.
Schließlich ist der letzte Punkt im Inneren switcherConfig
ist <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 field2Depend1
angezeigt , wenn Sie eine Option mit dem Wert wählen 2
auf field1
und field3Depend1
angezeigt , wenn Sie eine Option mit dem Wert wählen 3
.
Ich habe dieses Beispiel nur mit hide
und show
in einem erforderlichen Feld getestet und es scheint die Sichtbarkeit für die Validierung zu berücksichtigen. Mit anderen Worten, wenn dies field2Depend1
erforderlich 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.