Sto usando angolare, e in una finestra modale UI angolare voglio mostrare il modulo Drop In da Braintree per ottenere un metodo di pagamento. Così, creo la forma usuale (partial.html
):Le chiamate multiple a Braintree si traducono in più eventi onPaymentMethodRicevuti
<form id="creditCard" >
<div id="dropin"></div>
<button type="submit" id="btnPay" >Pay</button>
</form>
e poi mostro il modal con questo:
var modalInstance = $modal.open({
templateUrl: 'partial.html',
controller: 'ModalController'
});
Dove ModalController contiene la chiamata al setup Braintree:
braintree.setup($scope.clientToken, 'dropin', {
container: 'dropin',
onPaymentMethodReceived: function (result) {
$scope.$apply(function() {
$scope.success = true;
// Do something else with result
});
}
});
Questo mostrerà il modulo Drop In da braintree graziosamente (l'installazione genera il modulo) e accetta la carta di credito e la data di scadenza, tutte funzionanti fino ad ora.
Il problema è che, ogni volta che si chiama il modale, viene eseguito il ModalController, quindi viene eseguito anche il braintree.setup()
. Quindi, quando inserisco il numero della carta di credito e la data di scadenza e paghi il pagamento, l'evento onPaymentMethodReceived()
viene attivato una volta per l'esecuzione della configurazione! Cioè, se la prima volta chiamo il modale, innescherà l'evento una volta, la seconda lo attiverà due volte e così via. Come se ogni volta che chiamo setup, viene creato un nuovo hook per l'evento.
Qualche idea su come evitare questo? C'è un modo per "dissipare" il gestore di eventi onPaymentMethodReceived()
? Ho bisogno di chiamare l'installazione più volte poiché ogni volta che chiamo il modale, il clientToken potrebbe essere cambiato.
Grazie per qualsiasi aiuto o puntatore per aiutare.
Lavoro a Braintree. Stiamo lavorando per migliorare questo; al momento non esiste una soluzione semplice e completa. Se [entri in contatto con il nostro team di supporto] (https://support.braintreepayments.com/) dovrebbe essere in grado di aiutarti. – agf
Qualsiasi aggiornamento su questo, @agf? –