#vue.js
#vue.js
Вопрос:
У меня есть компоненты Vue, и одним из моих компонентов Vue является форма оплаты Square. По моему mounted()
, у меня есть вся квадратная логика и создание формы как paymentForm
. После создания платежа мне нужно выполнить paymentForm.build()
. Как я могу это сделать, не используя setTimeout?
mounted() {
this.paymentForm = new SqPaymentForm({
// Initialize the payment form elements
autoBuild: false,
applicationId: applicationId,
locationId: locationId,
inputClass: 'form-control',
// Customize the CSS for SqPaymentForm iframe elements
inputStyles: [{
fontSize: '14px',
}],
// Initialize the credit card placeholders
cardNumber: {
elementId: 'sqCardNumber',
placeholder: 'Card Number'
},
cvv: {
elementId: 'sqCvCode',
placeholder: 'CVV'
},
expirationDate: {
elementId: 'sqExp',
placeholder: 'MM/YY'
},
postalCode: {
elementId: 'sqPostalCode',
placeholder: 'Postal Code'
},
// SqPaymentForm callback functions
callbacks: {
methodsSupported: function (methods) {},
createPaymentRequest: function () {},
cardNonceResponseReceived: function(errors, nonce, cardData) {
debugger
if (errors) {
cardNonceError(errors);
return;
}
cardNonceReceived(nonce);
},
unsupportedBrowserDetected: function() {
alert('Sorry, your browser is not supported!');
},
inputEventReceived: function(inputEvent) {
switch (inputEvent.eventType) {
case 'focusClassAdded':
// HANDLE AS DESIRED
break;
case 'focusClassRemoved':
// HANDLE AS DESIRED
break;
case 'errorClassAdded':
// HANDLE AS DESIRED
break;
case 'errorClassRemoved':
// HANDLE AS DESIRED
break;
case 'cardBrandChanged':
// HANDLE AS DESIRED
break;
case 'postalCodeChanged':
// HANDLE AS DESIRED
break;
}
},
paymentFormLoaded: function() {
paymentForm.setPostalCode(postalCode);
formDisplayHandler();
}
}
});
// setTimeout(() => {
this.paymentForm.build()
// }, 500);
}
Комментарии:
1. Не должно быть никаких причин для необходимости
setTimeout
.SqPaymentForm
это синхронный конструктор.2. Можете ли вы создать живую демонстрацию, чтобы воспроизвести проблему? Что происходит, когда вы вызываете
build()
напрямую, не устанавливая тайм-аут?3. @StevenB. без переноса
this.paymentForm.build()
в settimeout он сообщает мнеpaymentForm is undefined
4. @herkypam Установлены ли ваше местоположение и идентификатор приложения?
5. @StevenB. да, первое, что я проверил