यह कई जवाबों के साथ एक पुराना सवाल है जो काम करता है, हालांकि मैंने फैले हुए घटकों की आवश्यकता के बिना Magento प्रदान करता है (2.1.0 के रूप में) का उपयोग कर एक समाधान खोजा है। चूंकि कई प्रश्नों को डुप्लिकेट के रूप में चिह्नित किया गया है और यहां निर्देशित किया गया है मैंने सोचा कि इस विकल्प पर कुछ जानकारी प्रदान करना फायदेमंद होगा।
सभी प्रकार के तत्व यूआई घटक जो विस्तार करते Magento_Ui/js/form/element/abstract.js
हैं switcherConfig
, उन उद्देश्यों के लिए एक सेटिंग उपलब्ध है जैसे तत्वों को छिपाना / दिखाना और साथ ही अन्य क्रियाएं। switcher
घटक पर पाया जा सकता Magento_Ui / js / प्रपत्र / स्विचर उत्सुक के लिए। आप इसका उदाहरण बिक्री_रूले_फॉर्म.एक्सएमएल और कैटलॉग_रूले_फॉर्म.एक्सएमएल में इस्तेमाल कर सकते हैं । बेशक यदि आप अपने स्वयं के कस्टम घटक का उपयोग कर रहे हैं तो आप अभी भी इसका उपयोग कर सकते हैं जब तक कि आपका घटक अंततः विस्तारित हो जाता है 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 तत्व नाम कैसे लिखे गए हैं, तो आप एलन स्टॉर्म के लेख को देख सकते हैं । यह मूल रूप {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
आवश्यक हो तो दिखाई देने पर ही इसकी आवश्यकता होगी। इसके लिए आगे के विन्यास की आवश्यकता नहीं है।
आशा है कि यह किसी और अधिक समाधान की तलाश में किसी के लिए कुछ मदद प्रदान करता है।