Lỗi xác thực sau khi thêm lưới vào biểu mẫu chỉnh sửa khách hàng của quản trị viên


8

Tôi đã thêm thành công tab tùy chỉnh có lưới vào biểu mẫu Chỉnh sửa khách hàng trong quản trị viên Magento. Tab sử dụng <insertListing>thẻ trong XML bố trí của nó để hiển thị lưới, hoạt động như bình thường. Tuy nhiên, khi tôi cố gắng cứu khách hàng, xác thực mẫu sẽ xuất hiện lỗi. Tôi đã gỡ lỗi này và có vẻ như khi validate()phương thức tab_group.jscố gắng gọi validatephương thức của tab thì nó trả về undefined. Tôi đã so sánh thẻ này với tab Tín dụng Store, được tạo bằng các khối Lưới không dùng nữa và đối với phần tử đó, nó trả về một mảng trống. Có cái gì tôi đã bỏ lỡ trong cấu hình của tôi?

Lỗi:

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

Bố cục tab 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>

Vui lòng chia sẻ mã lưới của bạn, mã chia sẻ hiện tại đang hoạt động tốt.
kunj

Câu trả lời:


8

Đây là lỗi. Vì vậy, bạn có thể thêm mixin vào nó. Hãy thử cách sau:

VendorName / ModuleName / view / adminhtml / allowjs-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 / thành phần / 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;
            }
        });
    }
});

Xóa pub / static / * và Triển khai nội dung tĩnh


Cảm ơn. Điều này làm việc tuyệt vời, với một vài sửa đổi.
Joseph Leedy

@JosephLeedy, bạn đã thực hiện những sửa đổi gì. sau khi thêm mã này, vẫn gặp lỗi tương tự
Jaisa

@Jaisa nếu bạn xem bản sửa đổi câu trả lời, bạn sẽ thấy những gì tôi đã thay đổi.
Joseph Leedy

Xin chào @JosephLeedy, tôi đang gặp lỗi tương tự trong doanh nghiệp, tôi đã áp dụng thay đổi này nhưng nó vẫn hiển thị lỗi tương tự ngay cả sau khi xóa pub / static var và xóa bộ đệm. bạn có thể làm ơn giúp toi được không? Tôi đang sử dụng M2.3.1
Pribhav

Công việc tuyệt vời .. cảm ơn rất nhiều vì điều này.
Mohit Kumar Arora
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.