Kesalahan Validasi Setelah Menambahkan Kisi ke Formulir Edit Pelanggan Admin


8

Saya telah berhasil menambahkan tab khusus dengan kisi ke formulir Edit Pelanggan di admin Magento. Tab menggunakan <insertListing>tag dalam tata letak XML untuk merender grid, yang berfungsi sebagaimana mestinya. Ketika saya mencoba untuk menyelamatkan pelanggan, validasi formulir membuat kesalahan. Saya telah men-debug ini dan tampaknya ketika validate()metode tab_group.jsmencoba memanggil metode tab validateitu kembali undefined. Saya telah membandingkan ini dengan tab Kredit Toko, yang dibuat menggunakan blok Grid yang sudah usang, dan untuk elemen itu mengembalikan array kosong. Apakah ada sesuatu yang saya lewatkan pada konfigurasi saya?

Kesalahan:

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

XML Layout Tab ( 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>

Silakan bagikan kode kotak Anda, kode bersama saat ini berfungsi dengan baik.
kunj

Jawaban:


8

Ini bugnya. Jadi kamu bisa menambahkan mixin di atasnya. Coba cara berikut:

VendorName / ModuleName / view / adminhtml / requireejs-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;
            }
        });
    }
});

Hapus pub / static / * dan Sebarkan konten statis


Terima kasih. Ini bekerja dengan baik, dengan beberapa modifikasi.
Joseph Leedy

@ JosephLeedy, modifikasi apa yang Anda lakukan. setelah menambahkan JS ini, masih ada kesalahan yang sama
Jaisa

@ Jaisa jika Anda melihat pada revisi jawaban, Anda akan melihat apa yang saya ubah.
Joseph Leedy

Halo @ JosephLeedy, saya mendapatkan kesalahan yang sama di perusahaan, saya menerapkan perubahan ini tetapi masih menampilkan kesalahan yang sama bahkan setelah menghapus pub / static var generation dan membersihkan cache. Tolong bantu saya. Saya menggunakan M2.3.1
Pribhav

Kerja bagus .. terima kasih banyak untuk ini.
Mohit Kumar Arora
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.