J'ai mis à jour Magento2.3.1 vers Magento2.3.2. Lorsque vous passez à la caisse, j'obtiens l'erreur de liaison de données -
knockout-3.4.1.js: 72 Uncaught ReferenceError: Impossible de traiter la liaison "if: function () {return (addressOptions.length> 1)}" Message: addressOptions n'est pas défini
Lorsque j'ai recherché le mot-clé addressOptions dans mon dossier magento, le chemin du fichier est: /vendor/magento/module-checkout/view/frontend/web/template/billing-address/list.html et le code dans le fichier html est:
<div class="field field-select-billing"> <label class="label"><span data-bind="i18n: 'My billing and shipping address are the same'"></span></label> <div class="control" data-bind="if: (addressOptions.length > 1)"> <select class="select" name="billing_address_id" data-bind=" options: addressOptions, optionsText: addressOptionsText, value: selectedAddress, event: {change: onAddressChange(selectedAddress())}; "></select> </div> </div>
L'erreur est jointe comme ci - dessous knockout.js Si quelqu'un sait s'il vous plaît aidez-moi. Merci d'avance.
3 Réponses :
Tu as
vendor / magento / module-checkout / view / frontend / web / template / billing-address.html
réécrit dans votre thème personnalisé.
Mettez-le à jour, recompilez-le et voyez s'il résout votre problème.
J'ai pu résoudre la réécriture du modèle billing-address.html d'un plugin personnalisé que j'ai acheté. Dans ce modèle, il y avait l'inclusion du modèle de liste d'adresses de facturation de cette manière:
<each args="getRegion('billing-address-list')" render="" />
alors que dans le cœur de magento, le modèle a été inclus de cette manière à la place:
<!-- ko template: 'Magento_Checkout/billing-address/list' --><!-- /ko -->
j'ai donc effectué cette modification dans mon modèle et je ne reçois plus d'erreur. Peut-être que quelque chose a changé dans les dernières versions de Magento2.3 concernant les inclusions de ce type de modèles?
/** * Magento 2.3.2 Fix checkout address issue. */ define([ 'ko', 'underscore', 'Magento_Ui/js/form/form', 'Magento_Customer/js/model/customer', 'Magento_Customer/js/model/address-list', 'Magento_Checkout/js/model/quote', 'Magento_Checkout/js/action/create-billing-address', 'Magento_Checkout/js/action/select-billing-address', 'Magento_Checkout/js/checkout-data', 'Magento_Checkout/js/model/checkout-data-resolver', 'Magento_Customer/js/customer-data', 'Magento_Checkout/js/action/set-billing-address', 'Magento_Ui/js/model/messageList', 'mage/translate' ], function ( ko, _, Component, customer, addressList, quote, createBillingAddress, selectBillingAddress, checkoutData, checkoutDataResolver, customerData, setBillingAddressAction, globalMessageList, $t ) { 'use strict'; var lastSelectedBillingAddress = null, newAddressOption = { /** * Get new address label * @returns {String} */ getAddressInline: function () { return $t('New Address'); }, customerAddressId: null }, countryData = customerData.get('directory-data'), addressOptions = addressList().filter(function (address) { return address.getType() == 'customer-address'; //eslint-disable-line eqeqeq }); addressOptions.push(newAddressOption); return Component.extend({ defaults: { template: 'Magento_Checkout/billing-address', actionsTemplate: 'Magento_Checkout/billing-address/actions', formTemplate: 'Magento_Checkout/billing-address/form', detailsTemplate: 'Magento_Checkout/billing-address/details', links: { isAddressFormVisible: '${$.billingAddressListProvider}:isNewAddressSelected' } }, currentBillingAddress: quote.billingAddress, addressOptions: addressOptions, customerHasAddresses: addressOptions.length > 0, /** * Init component */ initialize: function () { this._super(); quote.paymentMethod.subscribe(function () { checkoutDataResolver.resolveBillingAddress(); }, this); }, /** * @return {exports.initObservable} */ initObservable: function () { this._super() .observe({ selectedAddress: null, isAddressDetailsVisible: quote.billingAddress() != null, isAddressFormVisible: !customer.isLoggedIn() || !addressOptions.length, isAddressSameAsShipping: false, saveInAddressBook: 1 }); quote.billingAddress.subscribe(function (newAddress) { if (quote.isVirtual()) { this.isAddressSameAsShipping(false); } else { this.isAddressSameAsShipping( newAddress != null && newAddress.getCacheKey() == quote.shippingAddress().getCacheKey() //eslint-disable-line eqeqeq ); } if (newAddress != null && newAddress.saveInAddressBook !== undefined) { this.saveInAddressBook(newAddress.saveInAddressBook); } else { this.saveInAddressBook(1); } this.isAddressDetailsVisible(true); }, this); return this; }, /** * @param {Object} address */ onAddressChange: function (address) { (address === newAddressOption) ? this.isAddressFormVisible(false) : this.isAddressFormVisible(true); }, canUseShippingAddress: ko.computed(function () { return !quote.isVirtual() && quote.shippingAddress() && quote.shippingAddress().canUseForBilling(); }), /** * @param {Object} address * @return {*} */ addressOptionsText: function (address) { return address.getAddressInline(); }, /** * @return {Boolean} */ useShippingAddress: function () { if (this.isAddressSameAsShipping()) { selectBillingAddress(quote.shippingAddress()); this.updateAddresses(); this.isAddressDetailsVisible(true); } else { lastSelectedBillingAddress = quote.billingAddress(); quote.billingAddress(null); this.isAddressDetailsVisible(false); } checkoutData.setSelectedBillingAddress(null); return true; }, /** * Update address action */ updateAddress: function () { var addressData, newBillingAddress; // if (this.selectedAddress() && !this.isAddressFormVisible()) { if (this.selectedAddress() && this.selectedAddress() != newAddressOption) { //eslint-disable-line eqeqeq selectBillingAddress(this.selectedAddress()); checkoutData.setSelectedBillingAddress(this.selectedAddress().getKey()); } else { this.source.set('params.invalid', false); this.source.trigger(this.dataScopePrefix + '.data.validate'); if (this.source.get(this.dataScopePrefix + '.custom_attributes')) { this.source.trigger(this.dataScopePrefix + '.custom_attributes.data.validate'); } if (!this.source.get('params.invalid')) { addressData = this.source.get(this.dataScopePrefix); if (customer.isLoggedIn() && !this.customerHasAddresses) { //eslint-disable-line max-depth this.saveInAddressBook(1); } addressData['save_in_address_book'] = this.saveInAddressBook() ? 1 : 0; newBillingAddress = createBillingAddress(addressData); // New address must be selected as a billing address selectBillingAddress(newBillingAddress); checkoutData.setSelectedBillingAddress(newBillingAddress.getKey()); checkoutData.setNewCustomerBillingAddress(addressData); } } this.updateAddresses(); }, /** * Edit address action */ editAddress: function () { lastSelectedBillingAddress = quote.billingAddress(); quote.billingAddress(null); this.isAddressDetailsVisible(false); }, /** * Cancel address edit action */ cancelAddressEdit: function () { this.restoreBillingAddress(); if (quote.billingAddress()) { // restore 'Same As Shipping' checkbox state this.isAddressSameAsShipping( quote.billingAddress() != null && quote.billingAddress().getCacheKey() == quote.shippingAddress().getCacheKey() && //eslint-disable-line !quote.isVirtual() ); this.isAddressDetailsVisible(true); } }, /** * Manage cancel button visibility */ canUseCancelBillingAddress: ko.computed(function () { return quote.billingAddress() || lastSelectedBillingAddress; }), /** * Restore billing address */ restoreBillingAddress: function () { if (lastSelectedBillingAddress != null) { selectBillingAddress(lastSelectedBillingAddress); } }, /** * @param {Number} countryId * @return {*} */ getCountryName: function (countryId) { return countryData()[countryId] != undefined ? countryData()[countryId].name : ''; //eslint-disable-line }, /** * Trigger action to update shipping and billing addresses */ updateAddresses: function () { if (window.checkoutConfig.reloadOnBillingAddress || !window.checkoutConfig.displayBillingOnPaymentMethod ) { setBillingAddressAction(globalMessageList); } }, /** * Get code * @param {Object} parent * @returns {String} */ getCode: function (parent) { return _.isFunction(parent.getCode) ? parent.getCode() : 'shared'; } }); });
Pour que cette liaison fonctionne, le contexte de liaison de votre élément doit contenir une propriété
addressOptions
. Vous pouvez essayer cette stratégie de débogage pour en savoir plus.Merci pour votre réponse. Mais dans ce cas, il y a un viewmodel créé mais dans mon cas, le fichier est à l'intérieur du vendeur / magento / module-checkout / view / frontend / web / template / bi lling-address / list.h tml, je n'ai pas créé celui-ci vient d'être mis à jour vers magento2.3.2 à partir de 2.3.1.
Je suis confronté au même problème après la mise à jour vers Magento 2.3.2 Avez-vous trouvé une solution?
Non pas encore. J'ai été coincé avec ce problème, entravant vraiment mes travaux.
Pareil ici. Une solution encore?
Toujours pas de chance! Je suis coincé avec ça. :(
@Suman Maharjan, avez-vous trouvé une solution à ce sujet.