Validierungsfehler nach dem Hinzufügen eines Rasters zum Bearbeitungsformular für Administratorkunden

8

Ich habe dem Kundenbearbeitungsformular im Magento-Administrator erfolgreich eine benutzerdefinierte Registerkarte mit einem Raster hinzugefügt. Die Registerkarte verwendet das <insertListing>Tag in ihrem Layout-XML, um das Raster so zu rendern, wie es sollte. Wenn ich jedoch versuche, den Kunden zu speichern, wird bei der Formularüberprüfung ein Fehler ausgegeben. Ich habe dies getestet und es scheint, dass die validate()Methode von tab_group.jsversucht, die Methode der Registerkarte aufzurufen validate, zurückgegeben wird undefined. Ich habe dies mit der Registerkarte "Guthaben speichern" verglichen, die mit den veralteten Rasterblöcken erstellt wurde, und für dieses Element wird ein leeres Array zurückgegeben. Gibt es etwas, das ich in meiner Konfiguration verpasst habe?

Error:

tab_group.js:68 Uncaught TypeError: Cannot read property 'valid' of undefined
    at tab_group.js:68
    at Function.findIndex (underscore.js:644)
    at Function._.find._.detect (underscore.js:206)
    at UiClass.validate (tab_group.js:67)
    at Array.some (<anonymous>)
    at UiClass.onValidate (tab_group.js:86)
    at setNested (objects.js:43)
    at Object.nested (objects.js:117)
    at UiClass.set (element.js:305)
    at updateValue (links.js:80)
(anonymous) @ tab_group.js:68
(anonymous) @ underscore.js:644
_.find._.detect @ underscore.js:206
validate @ tab_group.js:67
onValidate @ tab_group.js:86
setNested @ objects.js:43
nested @ objects.js:117
set @ element.js:305
updateValue @ links.js:80
(anonymous) @ events.js:87
trigger @ events.js:84
trigger @ events.js:162
validate @ form.js:333
save @ form.js:261
dispatch @ jquery.js:5226
elemData.handle @ jquery.js:4878

Registerkartenlayout XML ( view/base/ui_component/customer_form.xml):

<?xml version="1.0"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <fieldset name="downloaded_blueprints" sortOrder="1000">
        <settings>
            <label translate="true">Downloaded Blueprints</label>
        </settings>
        <insertListing name="downloaded_blueprints_listing">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="source" xsi:type="string">blueprint_download</item>
                </item>
            </argument>
            <settings>
                <externalProvider>${ $.ns }.downloaded_blueprints_listing_data_source</externalProvider>
                <autoRender>true</autoRender>
                <dataScope>downloaded_blueprints_listing</dataScope>
                <ns>downloaded_blueprints_listing</ns>
                <exports>
                    <link name="customerId">${ $.externalProvider }:params.customer_id</link>
                </exports>
                <imports>
                    <link name="customerId">${ $.provider }:data.customer.entity_id</link>
                </imports>
            </settings>
        </insertListing>
    </fieldset>
</form>
Joseph Leedy
quelle
Bitte teilen Sie Ihren Grid-Code mit. Der aktuelle freigegebene Code funktioniert einwandfrei.
Kunj

Antworten:

8

Das ist der Fehler. Sie können also Mixin hinzufügen. Versuchen Sie es auf folgende Weise:

VendorName / ModuleName / view / adminhtml / requirejs-config.js


var config = {
    "config": {
        'mixins': {
            'Magento_Ui/js/form/components/tab_group': {
                'VendorName_ModuleName/js/mixin/form/components/tab_group': true
            }
        }
    }
};

VendorName / ModuleName / view / adminhtml / web / js / mixin / form / components / tab_group.js


define([
    'underscore'
], function (_) {
    'use strict';

    return function (TabGroup) {
        return TabGroup.extend({
            /**
             * Delegates 'validate' method on element, then reads 'invalid' property
             * of params storage, and if defined, activates element, sets
             * 'allValid' property of instance to false and sets invalid's
             * 'focused' property to true.
             *
             * @param {Object} elem
             */
            validate: function (elem) {
                // Pass through if element is not fieldset
                if (elem.index !== 'downloaded_blueprints') {
                    return this._super();
                }

                var result = elem.delegate('validate'),
                    invalid;

                invalid = _.find(result, function (item) {
                    if (item === undefined) {
                        return 0;
                    }

                    return !item.valid;
                });

                if (invalid) {
                    elem.activate();
                    invalid.target.focused(true);
                }

                return invalid;
            }
        });
    }
});

Entfernen Sie pub / static / * und stellen Sie statischen Inhalt bereit

Sohel Rana
quelle
Vielen Dank. Dies hat mit ein paar Modifikationen großartig funktioniert.
Joseph Leedy
@ JosephLeedy, welche Änderungen werden vorgenommen? Nach dem Hinzufügen dieses JS bekam immer noch den gleichen Fehler
Jaisa
@Jaisa Wenn Sie sich die Antwortrevisionen ansehen, werden Sie sehen, was ich geändert habe.
Joseph Leedy
Hallo @JosephLeedy, ich erhalte den gleichen Fehler im Unternehmen. Ich habe diese Änderung angewendet, aber sie zeigt auch nach dem Entfernen der Pub / Static-Var-Generierung und dem Bereinigen des Caches immer noch den gleichen Fehler an. Würden Sie mir bitte helfen? Ich benutze M2.3.1
Pribhav
Tolle Arbeit .. vielen Dank dafür.
Mohit Kumar Arora