Magento 2.2.5: Cách xác thực địa chỉ giao hàng


7

Tôi đang thực hiện Thanh toán tùy chỉnh và đây là những gì tôi đã thực hiện cho đến bây giờ. nhập mô tả hình ảnh ở đây

Adea là để sử dụng xác thực để khi tôi nhấp vào nút "Tiếp theo", nó sẽ kiểm tra xem hộp kiểm trong "Điều khoản sử dụng", nếu được chọn, thì nó sẽ tự do, nhưng nếu không, thông báo xác thực sẽ xuất hiện.

Đây là mã của tôi, tôi đã chuyển sang github để các bạn có thể dễ dàng xem và làm lại thủ tục:
https://github.com/saxsax1995/MagentoCheckoutCustom

Vì vậy, tôi đã theo dõi devdoc và mageplaza
https://devdocs.magento.com/guides/v2.2/howdoi/checkout/checkout_carrier.html https://www.mageplaza.com/custom-shipping-carrier-validator-magento -2.html
Nhưng nó vẫn không hoạt động.

Tôi đã cố gắng để console.log()vào C:\xampp\htdocs\magento\app\code\Aht\MagentoCheckoutCustom\view\frontend\web\js\view\custom-validation.jsnhưng nó không chạy đến đó.
Tôi có thiếu một cái gì đó ở đây? Tôi nghĩ rằng tôi đã làm mọi thứ mà devdoc và mageplaza nói.

Vì vậy, đây là mã của tôi:

C: \ xampp \ htdocs \ magento \ app \ code \ Aht \ MagentoCheckoutCustom \ view \ frontend \ layout \ checkout_index_index.xml

<?xml version="1.0"?>
<!--
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="checkout"
      xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <head>
        <css src="Aht_MagentoCheckoutCustom/css/style.css"/>
        <!--<script src="Aht_MagentoCheckoutCustom::js/custom-validator.js"></script>-->
    </head>
    <body>
        <referenceBlock name="checkout.root">
            <arguments>
                <argument name="jsLayout" xsi:type="array">
                    <item name="components" xsi:type="array">
                        <item name="checkout" xsi:type="array">
                            <item name="children" xsi:type="array">
                                <item name="steps" xsi:type="array">
                                    <item name="children" xsi:type="array">
                                        <item name="shipping-step" xsi:type="array">
                                            <item name="children" xsi:type="array">
                                                <item name="step-config" xsi:type="array">
                                                    <item name="children" xsi:type="array">
                                                        <item name="shipping-rates-validation" xsi:type="array">
                                                            <item name="children" xsi:type="array">
                                                                <item name="custom-validator" xsi:type="array">
                                                                    <item name="component" xsi:type="string">Aht_MagentoCheckoutCustom/js/view/custom-validation</item>
                                                                </item>
                                                            </item>
                                                        </item>
                                                    </item>
                                                </item>
                                                <item name="shippingAddress" xsi:type="array">
                                                    <!--<item name="config" xsi:type="array">-->
                                                        <!--<item name="template" xsi:type="string">Aht_MagentoCheckoutCustom/custom-shipping</item>-->
                                                    <!--</item>-->
                                                    <item name="children" xsi:type="array">
                                                        <item name="shipping-address-fieldset" xsi:type="array">
                                                            <item name="children" xsi:type="array">
                                                                <item name="delivery-group" xsi:type="array">
                                                                    <item name="component" xsi:type="string">Aht_MagentoCheckoutCustom/js/view/custom-shipping</item>
                                                                    <item name="provider" xsi:type="string">checkoutProvider</item>
                                                                    <item name="sortOrder" xsi:type="string">150</item>
                                                                    <item name="children" xsi:type="array">
                                                                        <item name="delivery-fieldset" xsi:type="array">
                                                                            <!-- uiComponent is used as a wrapper for form fields (its template will render all children as a list) -->
                                                                            <item name="component" xsi:type="string">uiComponent</item>
                                                                            <item name="displayArea" xsi:type="string">delivery-fieldsets</item>
                                                                            <item name="children" xsi:type="array">
                                                                                <item name="delivery_instruction" xsi:type="array">
                                                                                    <item name="component" xsi:type="string">Magento_Ui/js/form/element/abstract</item>
                                                                                    <item name="config" xsi:type="array">
                                                                                        <!--customScope is used to group elements within a single form (e.g. they can be validated separately)-->
                                                                                        <item name="customScope" xsi:type="string">deliveryForm</item>
                                                                                        <item name="template" xsi:type="string">ui/form/field</item>
                                                                                        <item name="elementTmpl" xsi:type="string">ui/form/element/input</item>
                                                                                    </item>
                                                                                    <!-- value element allows to specify default value of the form field -->
                                                                                    <!--<item name="value" xsi:type="string">Yout value here</item>-->
                                                                                    <item name="provider" xsi:type="string">checkoutProvider</item>
                                                                                    <item name="dataScope" xsi:type="string">deliveryForm.delivery_instruction</item>
                                                                                    <item name="label" xsi:type="string">Delivery Instruction:</item>
                                                                                    <item name="sortOrder" xsi:type="string">1</item>
                                                                                </item>
                                                                                <item name="delivery_type" xsi:type="array">
                                                                                    <item name="component" xsi:type="string">Magento_Ui/js/form/element/select</item>
                                                                                    <item name="config" xsi:type="array">
                                                                                        <!--customScope is used to group elements within a single form (e.g. they can be validated separately)-->
                                                                                        <item name="customScope" xsi:type="string">deliveryForm</item>
                                                                                        <item name="template" xsi:type="string">ui/form/field</item>
                                                                                        <item name="elementTmpl" xsi:type="string">ui/form/element/select</item>
                                                                                    </item>
                                                                                    <item name="options" xsi:type="array">
                                                                                        <item name="0" xsi:type="array">
                                                                                            <item name="label" xsi:type="string">Delivery Type 1</item>
                                                                                            <item name="value" xsi:type="string">delivery_type_1</item>
                                                                                        </item>
                                                                                        <item name="1" xsi:type="array">
                                                                                            <item name="label" xsi:type="string">Delivery Type 2</item>
                                                                                            <item name="value" xsi:type="string">delivery_type_2</item>
                                                                                        </item>
                                                                                        <item name="2" xsi:type="array">
                                                                                            <item name="label" xsi:type="string">Delivery Type 3</item>
                                                                                            <item name="value" xsi:type="string">delivery_type_3</item>
                                                                                        </item>
                                                                                    </item>
                                                                                    <!-- value element allows to specify default value of the form field -->
                                                                                    <item name="provider" xsi:type="string">checkoutProvider</item>
                                                                                    <item name="dataScope" xsi:type="string">deliveryForm.delivery_type</item>
                                                                                    <item name="label" xsi:type="string">Delivery Type:</item>
                                                                                    <item name="sortOrder" xsi:type="string">2</item>
                                                                                </item>
                                                                                <item name="term_of_use" xsi:type="array">
                                                                                    <item name="component" xsi:type="string">Magento_Ui/js/form/element/boolean</item>
                                                                                    <item name="config" xsi:type="array">
                                                                                        <!--customScope is used to group elements within a single form (e.g. they can be validated separately)-->
                                                                                        <item name="customScope" xsi:type="string">deliveryForm</item>
                                                                                        <item name="template" xsi:type="string">ui/form/field</item>
                                                                                        <item name="elementTmpl" xsi:type="string">ui/form/element/checkbox</item>
                                                                                    </item>
                                                                                    <item name="provider" xsi:type="string">checkoutProvider</item>
                                                                                    <item name="dataScope" xsi:type="string">deliveryForm.term_of_use</item>
                                                                                    <item name="description" xsi:type="string">I accept the Terms of Use and Privacy Policy
                                                                                        Sorry, you must accept our Terms of Use and our Privacy Policy before placing your order</item>
                                                                                    <item name="sortOrder" xsi:type="string">3</item>
                                                                                </item>
                                                                            </item>
                                                                        </item>
                                                                    </item>
                                                                </item>
                                                            </item>
                                                        </item>
                                                    </item>
                                                </item>
                                            </item>
                                        </item>
                                    </item>
                                </item>
                            </item>
                        </item>
                    </item>
                </argument>
            </arguments>
        </referenceBlock>
    </body>
</page>

C: \ xampp \ htdocs \ magento \ app \ code \ Aht \ MagentoCheckoutCustom \ view \ frontend \ web \ js \ model \ custom-Shipping-Rate-verify-Rules.js

define(
    [],
    function () {
        'use strict';
        return {
            getRules: function() {
                return {
                    'term_of_use': {
                        'required': true
                    }
                };
            }
        };
    }
)

C: \ xampp \ htdocs \ magento \ app \ code \ Aht \ MagentoCheckoutCustom \ view \ frontend \ web \ js \ model \ custom-validator.js

define(
    [
        'jquery',
        'mageUtils',

        './custom-shipping-rates-validation-rules',
        'mage/translate'
    ],
    function ($, utils, validationRules, $t) {
        'use strict';
        return {
            validationErrors: [],
            validate: function (address) {
                var self = this;
                this.validationErrors = [];
                $.each(validationRules.getRules(), function (field, rule) {
                    if (rule.required && utils.isEmpty(address[field])) {
                        var message = $t('Field ') + field + $t(' is required.');
                        self.validationErrors.push(message);
                    }
                });
                return !Boolean(this.validationErrors.length);
            }
        };
    });

C: \ xampp \ htdocs \ magento \ app \ code \ Aht \ MagentoCheckoutCustom \ view \ frontend \ web \ js \ view \ custom-verify.js

define(
    [
        'uiComponent',
        'Magento_Checkout/js/model/shipping-rates-validator',
        'Magento_Checkout/js/model/shipping-rates-validation-rules',
        'Aht_MagentoCheckoutCustom/js/model/custom-validator',
        'Aht_MagentoCheckoutCustom/js/model/custom-shipping-rates-validation-rules'
    ],
    function (Component,
              defaultShippingRatesValidator,
              defaultShippingRatesValidationRules,
              shippingRatesValidator,
              shippingRatesValidationRules)
    {
        'use strict';
        console.log('123');
        defaultShippingRatesValidator.registerValidator('custom-validator', shippingRatesValidator);
        defaultShippingRatesValidationRules.registerRules('custom-shipping-rates-validation-rules', shippingRatesValidationRules);
        return Component;
    }
);



Trong sourceđó, nó thậm chí không được gọi trong mô-đun của tôi.
Dưới đây là hình ảnh mô tả: nhập mô tả hình ảnh ở đây


Xin vui lòng cho lời khuyên, cảm ơn vì đã đọc :)

EDIT 1:
Sau vài ngày tìm kiếm giải pháp, có vẻ như xác thực tùy chỉnh cho địa chỉ giao hàng không hoạt động theo cách này.
Tôi đã tìm thấy một giải pháp khác, hãy theo dõi sự kiện biểu mẫu gửi khi chúng tôi nhấp vào "Tiếp theo" trong setShippingInformation-> validateShippingInformationchức năng trongshipping.js nhập mô tả hình ảnh ở đây

C: \ xampp \ htdocs \ magento \ pub \ static \ frontend \ Magento \ luma \ en_US \ Magento_Checkout \ js \ view \ Shipping.js


Những gì tôi đang cố gắng làm là xác nhận "thời hạn sử dụng", và sau đó hiển thị thông báo xác thực sau nó. Ngay bây giờ, nó console.log chính xác khi tôi nhấp vào nút "Tiếp theo", nhưng không hiển thị thông báo chính xác. Nó luôn hiển thị "sai" giống như hình ảnh mô tả của tôi.
Vì vậy, đây là những gì tôi đã làm. (Tôi đã cập nhật trên github nếu các bạn muốn xem mô-đun)

C: \ xampp \ htdocs \ magento \ app \ code \ Aht \ MagentoCheckoutCustom \ view \ frontend \ web \ js \ view \ Shipping.js

define([
   'jquery',
    'ko'
], function ($, ko) {
    'use strict';

    return function (Target) {
        return Target.extend({
            errorDeliveryValidationMessage: ko.observable(false),
            validateShippingInformation: function () {
                this._super();
                if($('[name="term_of_use"]:checked').length > 0) {
                    console.log('1');
                    return true;
                }
                console.log('2');
                this.errorDeliveryValidationMessage('Please agree our term of use.');
                return false;
            }
        });
    }
});

C: \ xampp \ htdocs \ magento \ app \ code \ Aht \ MagentoCheckoutCustom \ view \ frontend \ allowjs-config.js

var config = {
    map: {
        '*': {
            'Magento_Checkout/js/model/shipping-save-processor/default': 'Aht_MagentoCheckoutCustom/js/model/shipping-save-processor/default'
        }
    }
    ,
    'config': {
        'mixins': {
            'Magento_Checkout/js/view/shipping': {
                'Aht_MagentoCheckoutCustom/js/view/shipping': true
            }
        }
    }
};

C: \ xampp \ htdocs \ magento \ pub \ static \ frontend \ Magento \ luma \ en_US \ Aht_MagentoCheckoutCustom \ template \ Shipping-Delivery \ Delivery-form.html

<form class="form form-shipping-delivery" id="co-shipping-delivery-form" data-bind="attr: {'data-hasrequired': $t('* Required Fields')}">
    <div id="shipping-delivery" class="fieldset delivery">
        <!-- ko foreach: getRegion('delivery-fieldsets') -->
        <!-- ko template: getTemplate() --><!-- /ko -->
        <!--/ko-->
    </div>
</form>
<div role="alert" class="message notice">
    <span text="errorDeliveryValidationMessage()" />
</div>

Câu trả lời:


0

Bạn có thể thử một cái gì đó như thế này, thêm cái này vào trong checkout_index_index.xml của bạn

<?xml version="1.0"?>
<!--
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
 -->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
    <referenceBlock name="checkout.root">
        <arguments>
            <argument name="jsLayout" xsi:type="array">
                <item name="components" xsi:type="array">
                    <item name="checkout" xsi:type="array">
                        <item name="children" xsi:type="array">
                            <item name="steps" xsi:type="array">
                                <item name="children" xsi:type="array">
                                    <item name="billing-step" xsi:type="array">
                                        <item name="children" xsi:type="array">
                                            <item name="payment" xsi:type="array">
                                                <item name="children" xsi:type="array">
                                                    <item name="payments-list" xsi:type="array">
                                                        <item name="children" xsi:type="array">
                                                            <item name="before-place-order" xsi:type="array">
                                                                <item name="children" xsi:type="array">
                                                                    <item name="agreements" xsi:type="array">
                                                                        <item name="component" xsi:type="string">Aht_MagentoCheckoutCustom/js/view/custom-js</item>
                                                                        <item name="sortOrder" xsi:type="string">100</item>
                                                                        <item name="displayArea" xsi:type="string">before-place-order</item>
                                                                        <item name="dataScope" xsi:type="string">checkoutAgreements</item>
                                                                        <item name="provider" xsi:type="string">checkoutProvider</item>
                                                                    </item>
                                                                </item>
                                                            </item>
                                                        </item>
                                                    </item>
                                                </item>
                                            </item>
                                        </item>
                                    </item>
                                </item>
                            </item>
                        </item>
                    </item>
                </item>
            </argument>
        </arguments>
    </referenceBlock>
</body>

trong Aht \ MagentoCheckoutCustom \ view \ frontend \ web \ js \ view \ custom-js.js

/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

 define([
'ko',
'jquery',
'uiComponent',
'Magento_CheckoutAgreements/js/model/agreements-modal'
], function (ko, $, Component, agreementsModal) {
//put the logic here
});

Thật không may, nó không hoạt động :( Bạn có giải pháp nào khác không?
fudu

Tôi nghĩ vấn đề của tôi ở đây là "sự kiện nhấp chuột" không hoạt động, tôi đã sử dụng deps:[ 'Aht_MagentoCheckoutCustom/js/custom-js' ]trong certjs-config.js để nó có thể nhập vào mọi trang trong magento 2 và console.log hoạt động. Nhưng sự kiện click không hoạt động.
fudu

Tôi đã theo dõi bài đăng này magento.stackexchange.com/questions/131056/iêu
fudu

Có vẻ như nó chỉ gọi lúc tải trang?
fudu

Tôi đã chỉnh sửa bài đăng, vui lòng kiểm tra :)
fudu

0

Bạn có thể sử dụng magento-initcho init và tải thành phần Js tùy chỉnh của bạn. Như sau:

Bước 1: xóa tiện ích mở rộng js trong requestjs-config.js

var config = {
    map: {
        '*': {
            //customJS doesn't work because no where need to use that customJS.
            customJs : 'Aht_MagentoCheckoutCustom/js/custom-js',
            'Magento_Checkout/js/model/shipping-save-processor/default': 'Aht_MagentoCheckoutCustom/js/model/shipping-save-processor/default'
        }
    }
};

Bước 2: Thêm tệp mẫu (sử dụng cho tệp init js) để kiểm tra bố cục checkout_index_index.xml.

<referenceContainer name="content">
    <block class="Magento\Framework\View\Element\Template" name="custom-js" template="Aht_MagentoCheckoutCustom::js.phtml" after="-"/>
</referenceContainer>

Và loại bỏ js nhập khẩu trên đầu

<script src="Aht_MagentoCheckoutCustom::js/custom-js.js"></script>

Bước 3: tạo js.phtml trong chế độ xem / frontend / mẫu và đặt nội dung

<script type="text/x-magento-init">
    {
        "*":{
            "customJs":{}
        }
    }
</script>

Bước 4: thay đổi nội dung của tệp js của bạn (custom-js.js).

define([
    'jquery'
], function ($) {
    'use strict';

    $.fn.customJs = function(options) {
        console.log('1234');
    };

    return true;
});

chờ đã, chúng ta có thể sử dụng <referenceContainer name="content">để tạo khối và mẫu mới không? Tôi có nghĩa là nó đã được sử dụng?
fudu

Thêm vào checkout_index_index.xml. Ví dụ gist.github.com/bangnguyen47/ cường
bang.nguyen47

Tôi đã thử giải pháp của bạn, nó vẫn hoạt động, nhưng vẫn vậy, trang thanh toán của tôi vẫn không hoạt động. Giống như cách cũ của tôi ... :( Cả hai giải pháp vẫn không hoạt động trên trang thanh toán (bước đầu tiên).
fudu

Tôi đã chỉnh sửa bài đăng, vui lòng kiểm tra :)
fudu

Tôi đã chỉnh sửa bài đăng, vui lòng kiểm tra :) EDIT 1
fudu

0

Lý do custom-validation.jstệp của bạn không tải là do cấu hình XML của bạn.

C: \ xampp \ htdocs \ magento \ app \ code \ Aht \ MagentoCheckoutCustom \ view \ frontend \ layout \ checkout_index_index.xml

Trong tệp này, bạn đã đặt tên không chính xác ở đây:

<item name="custom-validator" xsi:type="array">
    <item name="component" xsi:type="string">Aht_MagentoCheckoutCustom/js/view/custom-validation</item>
</item>

custom-validatorlà những gì không chính xác. Nó phải phù hợp với quy ước đặt tên sau : {shippingMethodCode}-rates-validation, thay thế {shippingMethodCode}bằng giá trị chính xác mà bạn đã chọn cho phương thức giao hàng trong etc/config.xmltệp của mô-đun . Vì vậy, ví dụ nếu bạn có những điều sau đây:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
    <default>
        <carriers>
            <foo_bar>
                <active>1</active>
                <title>Shipping</title>
                <shipping_cost>0.00</shipping_cost>
                <showmethod>yes</showmethod>
                <model>Aht\MagentoCheckoutCustom\Model\Carrier\Foobar</model>
            </foo_bar>
        </carriers>
    </default>
</config>

Thì bố cục XML của bạn sẽ là:

<item name="foo_bar-rates-validation" xsi:type="array">
    <item name="component" xsi:type="string">Aht_MagentoCheckoutCustom/js/view/custom-validation</item>
</item>

Lý do cho điều này có thể được tìm thấy trong (tham khảo Magento 2.3.2 tại thời điểm viết) Magento\Checkout\Block\Checkout\LayoutProcessor::processShippingChildrenComponents().

private function processShippingChildrenComponents($shippingRatesLayout)
{
    $activeCarriers = $this->shippingConfig->getActiveCarriers(
        $this->storeManager->getStore()->getId()
    );
    foreach (array_keys($shippingRatesLayout) as $carrierName) {
        $carrierKey = str_replace('-rates-validation', '', $carrierName);
        if (!array_key_exists($carrierKey, $activeCarriers)) {
            unset($shippingRatesLayout[$carrierName]);
        }
    }
    return $shippingRatesLayout;
}

Ở đây chúng ta có thể thấy Magento đang so sánh các hãng vận chuyển đang hoạt động với các thành phần UI được thêm thông qua bố cục XML. Nó đang sử dụng $carrierName(giá trị từ checkout_index_index.xmltệp của chúng tôi ) và tước chuỗi mã hóa cứng '-rates-xác thực' từ tên của tên thành phần UI để đưa ra a $carrierKey. Sau đó so sánh khóa vận chuyển với mảng mã vận chuyển vận chuyển đang hoạt động (mà chúng tôi thêm vào etc/config.xml), để xác định xem có nên xóa hướng dẫn cập nhật bố cục này hay không.

v2.3 Dev Docs về chủ đề này: https://devdocs.magento.com/guides/v2.3/howdoi/checkout/checkout_carrier.html

Hơn nữa, một khi bạn đã custom-validation.jsđược tải trên trang, tôi khuyên bạn nên thay đổi nội dung của nó để một lần nữa có các giá trị khớp với mã nhà cung cấp dịch vụ của bạn.

C: \ xampp \ htdocs \ magento \ app \ code \ Aht \ MagentoCheckoutCustom \ view \ frontend \ web \ js \ view \ custom-verify.js

Trên các dòng này:

defaultShippingRatesValidator.registerValidator('custom-validator', shippingRatesValidator);
defaultShippingRatesValidationRules.registerRules('custom-shipping-rates-validation-rules', shippingRatesValidationRules);

Các chuỗi bạn đang đi qua đây, Magento một lần nữa sử dụng theo cách tương tự như bố cục XML. So sánh các nhà cung cấp hoạt động và xác định xem có nên thêm quy tắc vào nhóm "Trường quan sát" hay không. Chúng tôi sẽ tìm thấy điều này trong

nhà cung cấp / magento / kiểm tra mô-đun / xem / frontend / web / js / model / vận chuyển-tỷ lệ-validator.js

(Dòng 52-56 của Magento 2.3.2)

registerValidator: function (carrier, validator) {
    if (checkoutConfig.activeCarriers.indexOf(carrier) !== -1) {
        validators.push(validator);
    }
},

carrierđây là chuỗi bạn đã truyền vào registerValidator()activeCarrierslà một mảng của các hãng vận chuyển đang hoạt động. Vì vậy, nếu bạn không chuyển vào chuỗi mã nhà cung cấp dịch vụ mà bạn đã xác định, bạn sẽ không thể thêm quy tắc xác thực cho mã đó.

Chúng ta sẽ tìm thấy logic tương tự trong registerRules()phương thức này.

nhà cung cấp / magento / kiểm tra mô-đun / xem / frontend / web / js / model / vận chuyển-tỷ lệ-xác nhận-quy tắc.js

registerRules: function (carrier, rules) {
    if (checkoutConfig.activeCarriers.indexOf(carrier) !== -1) {
        ratesRules[carrier] = rules.getRules();
    }
},

Do đó, các chuỗi được truyền đến registerRules()registerValidator()trong của bạn custom-validation.jssẽ giống nhau (mà chúng không giống nhau, do đó, điều đó cho tôi biết ít nhất một chuỗi không khớp chính xác với mã nhà cung cấp dịch vụ của bạn).


Tôi đã thực hiện tất cả các bước đó, và trình xác nhận và quy tắc của tôi đã được đăng ký, nhưng khi xác thực chỉ có trình xác thực mặc định được chạy (vì nó sử dụng Array.some để xác thực và điều đó trả về đúng). Tui bỏ lỡ điều gì vậy?
Einacio

Có nơi nào (có thể là một github gist hoặc dịch vụ khác) mà bạn có thể cung cấp mã ví dụ không? Có rất nhiều khía cạnh "cần phải được gõ chính xác" của chủ đề này, vì vậy thật khó để biết điều gì có thể xảy ra với bạn mà không thấy bất kỳ mã nào.
Darren Felton
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.