मैगेटो 2.1 मैं फार्म कैसे बनाते हैं घटक फ़ील्ड कस्टम दूसरे फ़ील्ड मान पर निर्भर करता है?


13

मेरे पास एक फ़ील्ड चयन है जिसमें कुछ विकल्प हैं। उनमें से एक में कुछ क्षेत्र मूल्य पर निर्भर होंगे, दूसरा क्षेत्र छिपा होगा। मैंने अपने क्षेत्र के लिए घटक js की प्रतिलिपि बनाई और विस्तारित की है, लेकिन यह काम नहीं किया या मैंने इसे गलत तरीके से नहीं किया। Ui घटक इस सुविधा का समर्थन करता है? मैं इसे कैसे प्राप्त कर सकता हूं?

नीचे मैंने क्या किया है:

<field name="field1">
    <argument name="data" xsi:type="array">
        <item name="options" xsi:type="object">Namespace\ModuleName\Model\Config\Source\Options</item>
        <item name="config" xsi:type="array">
            <item name="label" xsi:type="string" translate="true">Field name</item>
            <item name="visible" xsi:type="boolean">true</item>
            <item name="dataType" xsi:type="string">number</item>
            <item name="formElement" xsi:type="string">select</item>
            <item name="source" xsi:type="string">item</item>
            <item name="dataScope" xsi:type="string">field1</item>
            <item name="component" xsi:type="string">Pathto/js/form/element/options</item>
            <item name="validation" xsi:type="array">
                <item name="required-entry" xsi:type="boolean">true</item>
            </item>
        </item>
    </argument>
</field>

<field name="field2Depend1"></field>
<field name="field3Depend1"></field>

jsComponent js/form/element/options:

define([
    'underscore',
    'uiRegistry',
    'Magento_Ui/js/form/element/select',
    'Magento_Ui/js/modal/modal'
], function (_, uiRegistry, select) {
    'use strict';

    return select.extend({

        onChange: function () {
            this.enableDisableFields();
        },

        /**
         * Enable/disable fields on Coupons tab
         */
        enableDisableFields: function () {
            // code check field
        }
    });
});

जवाबों:


26

इसे आज़माएं ( ध्यान दें : "Namespace" लाइन और "ModuleName" को अपने मूल्यों के साथ बदलना न भूलें:

<field name="field1">
    <argument name="data" xsi:type="array">
        <item name="options" xsi:type="object">Namespace\ModuleName\Model\Config\Source\Options</item>
        <item name="config" xsi:type="array">
            <item name="label" xsi:type="string" translate="true">Parent Option</item>
            <item name="component" xsi:type="string">Namespace_ModuleName/js/form/element/options</item>
            <item name="visible" xsi:type="boolean">true</item>
            <item name="dataType" xsi:type="string">number</item>
            <item name="formElement" xsi:type="string">select</item>
            <item name="source" xsi:type="string">item</item>
            <item name="dataScope" xsi:type="string">field1</item>
            <item name="sortOrder" xsi:type="number">210</item>
            <item name="validation" xsi:type="array">
                <item name="required-entry" xsi:type="boolean">true</item>
            </item>
        </item>
    </argument>
</field>

<field name="field2Depend1">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="label" xsi:type="string">Field 1</item>
            <item name="dataType" xsi:type="string">text</item>
            <item name="formElement" xsi:type="string">input</item>
            <item name="source" xsi:type="string">item</item>
            <item name="sortOrder" xsi:type="number">220</item>
            <item name="breakLine" xsi:type="boolean">true</item>
            <item name="visibleValue" xsi:type="string">2</item>
            <item name="visible" xsi:type="boolean">false</item>
        </item>
    </argument>
</field>
<field name="field3Depend1">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="label" xsi:type="string">Field 2</item>
            <item name="dataType" xsi:type="string">text</item>
            <item name="formElement" xsi:type="string">input</item>
            <item name="source" xsi:type="string">item</item>
            <item name="sortOrder" xsi:type="number">230</item>
            <item name="breakLine" xsi:type="boolean">true</item>
            <item name="visibleValue" xsi:type="string">0</item>
            <item name="visible" xsi:type="boolean">false</item>
        </item>
    </argument>
</field>

कहाँ पे:

  • बच्चे के तत्वों की दृश्यता डिफ़ॉल्ट रूप से निर्धारित होती है false;
  • visibleValue- है field1मूल्य जब तत्व दिखाई देना चाहिए;

नामस्थान \ ModuleName \ मॉडल \ Config \ स्रोत \ विकल्प

namespace Namespace\ModuleName\Model\Config\Source;

use Magento\Framework\Option\ArrayInterface;

class Options implements ArrayInterface
{
    /**
     * @return array
     */
    public function toOptionArray()
    {
        $options = [
            0 => [
                'label' => 'Please select',
                'value' => 0
            ],
            1 => [
                'label' => 'Option 1',
                'value' => 1
            ],
            2  => [
                'label' => 'Option 2',
                'value' => 2
            ],
            3 => [
                'label' => 'Option 3',
                'value' => 3
            ],
        ];

        return $options;
    }
}

एप्लिकेशन / कोड / नाम स्थान / ModuleName / देखें / adminhtml / वेब / js / प्रपत्र / तत्व / options.js

define([
    'underscore',
    'uiRegistry',
    'Magento_Ui/js/form/element/select',
    'Magento_Ui/js/modal/modal'
], function (_, uiRegistry, select, modal) {
    'use strict';

    return select.extend({

        /**
         * On value change handler.
         *
         * @param {String} value
         */
        onUpdate: function (value) {
            console.log('Selected Value: ' + value);

            var field1 = uiRegistry.get('index = field2Depend1');
            if (field1.visibleValue == value) {
                field1.show();
            } else {
                field1.hide();
            }

            var field2 = uiRegistry.get('index = field3Depend1');
            if (field2.visibleValue == value) {
                field2.show();
            } else {
                field2.hide();
            }

            return this._super();
        },
    });
});

परिणाम:

मान 0 चयनित: मान 0 चयनित

मान 1 चयनित: मान 1 चयनित

मान 2 चयनित: मान 2 चयनित

मान 3 चयनित: मान 3 चयनित

पुनश्च: संभवतः यह सबसे अच्छा समाधान नहीं है, लेकिन यह आपकी मदद करेगा


onUpdate अच्छी तरह से काम कर रहा है, लेकिन onLoad कैसे करें? Field1.value कैसे प्राप्त करें?
१४:०४ पर zhartaunik

@zhartaunik मुझे लगता है कि आपको initializeअपने मामले में विधि का उपयोग करना चाहिए क्योंकि पति-पत्नी के पास कोई onLoadविधि नहीं है। आप इनपुट इंडेक्स कुंजी का उपयोग करके रजिस्ट्री से किसी भी स्थान पर कोई भी फ़ील्ड मान प्राप्त कर सकते हैं uiRegistry.get('index = field1'):। यदि आपके पास अधिक प्रश्न हैं, तो कृपया मुझे स्काइप (sarj1989) में संबोधित करें, रूसी में संवाद करना आसान होगा।
सरायेई उचुकलेबौ

धन्यवाद @ सियारहे मैंने इनिशियलाइज़ इस्तेमाल करने का फैसला किया। आवश्यक सत्यापन जोड़ने की तुलना में।
झारतुनिक ११'१६

1
जब मैं इनिशियलाइज़ मेथड वैल्यू "अपरिभाषित" का उपयोग कर रहा हूँ तो मुझे फील्ड वैल्यू नहीं मिल सकती है।
सौरभ तीतिया

1
@ सियारी उचुकलेबाउ क्या मैं इसके बजाय चेकबॉक्स जोड़ सकता हूं?
जूलियानो वर्गास

9

Magentix द्वारा सुझाए गए समाधान प्रारंभिक उपयोग करते समय समय-समय पर एक त्रुटि फेंक देंगे। यह आपके ब्राउज़र के घटकों को रेंडर करने के लिए लगने वाले समय पर निर्भर करता है। इसे ठीक करने के लिए आप सेटटाइमआउट का उपयोग कर सकते हैं।

नीचे दिए गए कोड को देखें:

define([
    'underscore',
    'uiRegistry',
    'Magento_Ui/js/form/element/select',
    'Magento_Ui/js/modal/modal'
], function (_, uiRegistry, select, modal) {
    'use strict';

    return select.extend({

        /**
         * Extends instance with defaults, extends config with formatted values
         *     and options, and invokes initialize method of AbstractElement class.
         *     If instance's 'customEntry' property is set to true, calls 'initInput'
         */
        initialize: function () {
            this._super();

            this.resetVisibility();

            return this;
        },

        toggleVisibilityOnRender: function (visibility, time) {
            var field = uiRegistry.get('index = field_to_toggle');
            if(field !== undefined) {
                if(visibility == 1) {
                    field.show();
                } else {
                    field.hide();
                }

                return;
            }
            else {
                var self = this;
                setTimeout(function() {
                    self.toggleVisibilityOnRender(visibility, time);
                }, time);
            }
        },

        /**
         * On value change handler.
         *
         * @param {String} value
         */
        onUpdate: function (value) {
            if (value == 1) {
                this.showField();
            } else {
                this.hideField();
            }
            return this._super();
        },

        resetVisibility: function () {
            if (this.value() == 1) {
                this.showField();
            } else {
                this.hideField();
            }
        },

        showField: function () {
            this.toggleVisibilityOnRender(1, 1000);

        },

        hideField: function () {
            this.toggleVisibilityOnRender(0, 1000);
        }
    });
});

इसका ठीक से काम करना।
धड़क मितेश

मेरी तरफ से +1। कोई भी अन्य काम नहीं करता लेकिन इसने मेरा काम किया।
अनाम

7

यह कई जवाबों के साथ एक पुराना सवाल है जो काम करता है, हालांकि मैंने फैले हुए घटकों की आवश्यकता के बिना 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हम दो तर्क देते हैं।

  1. value- यह वह मूल्य है field1जिसके actionsनीचे परिभाषित होना चाहिए ।
  2. actions- यहाँ हम एक और सरणी है। जब इस नियम की शर्तों को पूरा किया जाता है तो ये ट्रिगर किए जाने वाले कार्य हैं। फिर से, प्रत्येक actionका नाम केवल उस आइटम का सरणी इंडेक्स / कुंजी है।

अब प्रत्येक के actionपास दो तर्क हैं (एक वैकल्पिक 3 के साथ)।

  1. target- यह वह तत्व है जिसे आप इस कार्रवाई के तहत हेरफेर करना चाहते हैं। यदि आप इस बात से परिचित नहीं हैं कि मैगेंटो में ui_component तत्व नाम कैसे लिखे गए हैं, तो आप एलन स्टॉर्म के लेख को देख सकते हैं । यह मूल रूप {component_name}.{component_name}.{fieldset_name}.{field_name}से इस उदाहरण में कुछ है ।
  2. callback- यहाँ उपर्युक्त पर कार्रवाई की जानी है target। यह कॉलबैक एक फ़ंक्शन होना चाहिए जो लक्षित लक्ष्य पर उपलब्ध है। हमारे उदाहरण का उपयोग करता है hideऔर show। यह वह जगह है जहाँ आप उपलब्ध कार्यक्षमता पर विस्तार करना शुरू कर सकते हैं। catalog_rule_form.xmlउदाहरण मैंने पहले का उपयोग करता है उल्लेख किया setValidationहै, तो आप एक अलग उदाहरण देखना चाहते हैं।
  3. आप यह भी जोड़ सकते हैं <params>किसी भी करने के लिए actionकि उनके लिए कॉल। आप इसे catalog_rule_form.xmlउदाहरण में भी देख सकते हैं ।

अंत में अंदर की अंतिम वस्तु switcherConfigहै <enabled>true</enabled>। यह बहुत सीधे आगे होना चाहिए, यह हमारे द्वारा कार्यान्वित स्विचर कार्यक्षमता को सक्षम / अक्षम करने के लिए एक बूलियन है।

और हम कर रहे हैं। इसलिए आपको जो देखना चाहिए उसके ऊपर दिए गए उदाहरण का उपयोग करते हुए फ़ील्ड field2Depend1प्रदर्शित किया जाता है यदि आप मूल्य 2पर एक विकल्प चुनते हैं field1, और field3Depend1यदि आप मूल्य के साथ एक विकल्प चुनते हैं तो प्रदर्शित होता है 3

मैंने केवल hideऔर showआवश्यक फ़ील्ड का उपयोग करके इस उदाहरण का परीक्षण किया है और यह सत्यापन के लिए दृश्यता को ध्यान में रखता है। दूसरे शब्दों में, यदि field2Depend1आवश्यक हो तो दिखाई देने पर ही इसकी आवश्यकता होगी। इसके लिए आगे के विन्यास की आवश्यकता नहीं है।

आशा है कि यह किसी और अधिक समाधान की तलाश में किसी के लिए कुछ मदद प्रदान करता है।


1
"स्ट्रिंग्स को भी काम करना चाहिए लेकिन मैंने इस सिद्धांत का परीक्षण नहीं किया है।" मैंने गलती से परीक्षण किया और यह नहीं किया ... क्रियाएँ नियम सरणी के रूप में होती हैं जिन्हें कार्रवाई 0 या नियम 0 नहीं 1 या एक स्ट्रिंग के साथ शुरू करने की आवश्यकता होती है ...
Christophe Ferreboeuf

6

इस प्रश्न के लिए बहुत सारे उत्तर हैं, लेकिन उनमें से ज्यादातर या तो यह धारणा बनाते हैं कि क्या uiRegistry पूरी तरह से भरी हुई है, या setTimeoutकॉल स्टैक को खाली करने के लिए उपयोग करें, और अगले ईवेंटलूप की प्रतीक्षा करें (जो मेरी राय में अभी भी गलत तरीका है ऐसा करें - चूंकि आप सुनिश्चित नहीं हो सकते हैं कि अन्य यूआई घटकों ने लोड किया है - अगर मैं गलत हूं तो मुझे सही करें)।

सबसे पहले, निश्चित रूप से, अपने कस्टम JS घटक को फ़ील्ड कॉन्फिगर में जोड़ें (विवरण के लिए अन्य उत्तर देखें):

<item name="component" xsi:type="string">Namespace_ModuleName/js/form/element/options</item>

फिर, यहां कस्टम UI घटक है जो आश्रित क्षेत्रों को छुपाता है या दिखाता है - टिप्पणियों के साथ यह बताने के लिए कि क्या हो रहा है।

define([
    'underscore',
    'uiRegistry',
    'Magento_Ui/js/form/element/select'
], function (_, uiRegistry, select) {

    'use strict';

    return select.extend({

        /**
         * Array of field names that depend on the value of 
         * this UI component.
         */
        dependentFieldNames: [
            'my_field_name1',
            'my_field_name2'
        ],

        /**
         * Reference storage for dependent fields. We're caching this
         * because we don't want to query the UI registry so often.
         */
        dependentFields : [],

        /**
         * Initialize field component, and store a reference to the dependent fields.
         */
        initialize: function() {
            this._super();

            // We're creating a promise that resolves when we're sure that all our dependent
            // UI components have been loaded. We're also binding our callback because
            // we're making use of `this`
            uiRegistry.promise(this.dependentFieldNames).done(_.bind(function() {

                // Let's store the arguments (the UI Components we queried for) in our object
                this.dependentFields = arguments;

                // Set the initial visibility of our fields.
                this.processDependentFieldVisibility(parseInt(this.initialValue));
            }, this));
        },

        /**
         * On value change handler.
         *
         * @param {String} value
         */
        onUpdate: function (value) {
            // We're calling parseInt, because in JS "0" evaluates to True
            this.processDependentFieldVisibility(parseInt(value));
            return this._super();
        },

        /**
         * Shows or hides dependent fields.
         *
         * @param visibility
         */
        processDependentFieldVisibility: function (visibility) {
            var method = 'hide';
            if (visibility) {
                method = 'show';
            }

            // Underscore's invoke, calls the passed method on all the objects in our array
            _.invoke(this.dependentFields, method);
        }
    });
});

5

यदि आपको Field is Undefinedफ़ील्ड की दृश्यता की तरह त्रुटि मिली है, तो setTimeout()उस फ़ील्ड को लोड करने के लिए उपयोग करें :

fieldDepend: function (value) {
     setTimeout(function(){ 
        var field1 = uiRegistry.get('index = field2');

        if (field1.visibleValue == value) {
               field1.show();
        } else {
               field1.hide();
        }

       var field2 = uiRegistry.get('index = field3');

        if (field2.visibleValue == value) {
              field2.show();
        } else {
              field2.hide();
        }    
     }, 1);
     return this._super();
},

सेटटाइमआउट के बजाय, निर्भरता प्राप्त करने की अतुल्यकालिक विधि का उपयोग करें:uiRegistry.get('q', function(field) { ... }));
Erfan

टिप्पणी में सुझाव देने के लिए प्रेरित किया गया है और मेरे जवाब को डाउन-वोट कर सकते हैं आप यहां अपना उत्तर पोस्ट कर सकते हैं, यह किसी भी उत्तर को समर्पित करने का तरीका नहीं है, आप सिर्फ अलग तरीके का सुझाव दे रहे हैं, मेरा उत्तर गलत नहीं है। @Erfan। आपका डाउन वोट गलत प्रभाव डालता है।
रौनक चौहान

@ रोनकचौहान - बिंदु पर सहमत !!! आपका उत्तर गलत नहीं है, विभिन्न लोगों की राय, सुझाव और समाधान अलग-अलग हैं। आपका जवाब भी सही है !!
मंथन डेव

एक सेकंड के शुरू होने का इंतजार करना, और प्रारंभिक अवरोध को रोकना स्पष्ट रूप से इसे करने का गलत तरीका है। आपको कैसे पता चलेगा कि आपकी निर्भरता एक सेकंड में भरी जाएगी? यह दो सेकंड क्यों नहीं होगा? आप यहाँ एक धारणा बना रहे हैं, यह सबसे अच्छा है।
इरफान

मैंने यहाँ 1 सेकंड सेट नहीं किया है, इसकी मिलीसेकंड में, सेटटाइमआउट () पेज लोड करने के बाद सिर्फ मेरा कोड लोड करेगा, और यदि आपके पास आपका जवाब है तो आप इसे पोस्ट कर सकते हैं। डाउन-वोट किसी का जवाब अपने आप को सही साबित करने का तरीका नहीं है! @ इरफान
रौनक चौहान

2

कस्टम घटक init के साथ:

define([
    'underscore',
    'uiRegistry',
    'Magento_Ui/js/form/element/select',
    'Magento_Ui/js/modal/modal'
], function (_, uiRegistry, select, modal) {
    'use strict';

    return select.extend({

        /**
         * Init
         */
        initialize: function () {
            this._super();

            this.fieldDepend(this.value());

            return this;
        },

        /**
         * On value change handler.
         *
         * @param {String} value
         */
        onUpdate: function (value) {
            this.fieldDepend(value);

            return this._super();
        },

        /**
         * Update field dependency
         *
         * @param {String} value
         */
        fieldDepend: function (value) {
            var field = uiRegistry.get('index = field_to_toggle');

            if (value == 'xxxxx') {
                field.show();
            } else {
                field.hide();
            }

            return this;
        }
    });
});

इनिशियलाइज़ फंक्शन का उपयोग करने के बाद यह "फ़ील्ड अपरिभाषित है"।
प्रिंस पटेल

1
उपयोग setTimeout()में fieldDepend()क्योंकि अभी तक लोड नहीं किया गया है।
रौनक चौहान

2

फ़ील्ड निर्भरता से निपटने के कुछ तरीके हैं, साधारण हां / नहीं ड्रॉपडाउन, एक चेकबॉक्स या एक स्विचर के लिए, आप Magento 2 में importsया exportsलिंक करने वाले गुणों का उपयोग कर सकते हैं । समाधान की यहां विस्तार से चर्चा की गई है: Magento में UI घटक रूपों में निर्भर क्षेत्र 2 बूलीयन खेतों के लिए जावास्क्रिप्ट के बिना :

<!-- In the parent field <settings>...</settings> -->
<exports>
    <link name="checked">${$.parentName}.description:disabled</link>
</exports>

<!-- or -->

<!-- In the dependent field <settings>...</settings> -->
<imports>
    <link name="disabled">${$.parentName}.is_active:checked</link>
</imports>

अन्य प्रकार के मानों को संभालने के लिए जैसे कि एक ड्रॉपडाउन में मानों की सूची पर निर्भरता या हालांकि संभावना नहीं है, एक इनपुट फ़ील्ड का मान, आप इसका उपयोग कर सकते हैं switcherConfig। जानकारी के लिए जावास्क्रिप्ट के बिना Magento 2 में ui- घटक रूपों में निर्भर क्षेत्रों की जाँच करें ।

<switcherConfig>
    <rules>
        <rule name="0">
            <value>list</value><!-- Actions defined will be trigger when the current selected field value matches the value defined here-->
            <actions>
                <action name="0">
                    <target>hs_xml_dependentfield_model_form.hs_xml_dependentfield_model_form.general.list</target>
                    <callback>visible</callback>
                    <params>
                        <param name="0" xsi:type="boolean">true</param>
                    </params>
                </action>
                <action name="1">
                    <target>hs_xml_dependentfield_model_form.hs_xml_dependentfield_model_form.general.hex_code</target>
                    <callback>visible</callback>
                    <params>
                        <param name="0" xsi:type="boolean">true</param>
                    </params>
                </action>
            </actions>
        </rule>
        ...
    </rules>
    <enabled>true</enabled>
</switcherConfig>

उपरोक्त 2 नियम, XML कॉन्फिग का उपयोग करके बहुत अधिक सब कुछ संभालते हैं। अधिक जटिल नियमों के लिए, आप जावास्क्रिप्ट का भी उपयोग कर सकते हैं।

UI घटक रूप में प्रत्येक फ़ील्ड एक घटक है जिसे componentविशेषता के लिए उपयोग करके बढ़ाया जा सकता है <field component="path to your js" ...>...</field>। आप data.configघटक को अधिक जानकारी पास करने के लिए फ़ील्ड का उपयोग कर सकते हैं, यदि घटक सामान्य है और इसका पुन: उपयोग कई स्थानों पर किया जाता है, जो कि वेधशालाओं या विधियों के मानों को पारित करने के लिए संपत्ति को जोड़ने importsया exportsजोड़ने के लिए किया जाता है।

लिंकिंग गुणों के बारे में अधिक जानकारी के लिए आप UI घटकों के लिंकिंग गुणों की जांच कर सकते हैं


1

बस अगर कोई इरफ़ान समाधान के साथ संघर्ष करता है , तो आपको खेतों को पूरा रास्ता पास करना होगा dependentFieldNames, जैसे:

       dependentFieldNames: [
        'form_name.form_name.fieldset.field_name',
        'form_name.form_name.fieldset.field_name1',
        'form_name.form_name.fieldset.field_name2',
        'form_name.form_name.fieldset.field_name3'
    ],

मुझे यकीन नहीं है कि क्यों form_name को 2 बार होना चाहिए, लेकिन इसने मेरे लिए काम किया है।

इस मैं डाल डिबग करने console.log(query);में static/adminhtml/Magento/backend/en_US/Magento_Ui/js/lib/registry/registry.js223 लाइन (get () फ़ंक्शन बस से पहले this._addRequest(query, callback))

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.