Я использую angular, и в модальном окне angularUI я хочу показать форму Drop In из Braintree, чтобы получить способ оплаты. Таким образом, я создаю обычную форму (partial.html
):
<form id="creditCard" >
<div id="dropin"></div>
<button type="submit" id="btnPay" >Pay</button>
</form>
а затем я покажу modal с этим:
var modalInstance = $modal.open({
templateUrl: 'partial.html',
controller: 'ModalController'
});
Где ModalController содержит вызов установки Braintree:
braintree.setup($scope.clientToken, 'dropin', {
container: 'dropin',
onPaymentMethodReceived: function (result) {
$scope.$apply(function() {
$scope.success = true;
// Do something else with result
});
}
});
Это будет хорошо отображать форму Drop In от braintree (настройка генерирует форму) и принять кредитную карту и дату истечения срока действия, все работает до сих пор.
Проблема заключается в том, что каждый раз, когда я вызываю модальный, выполняется ModalController, и, таким образом, выполняется также braintree.setup()
. Затем, когда я ввожу номер кредитной карты, дату истечения срока действия и выигрыш, событие onPaymentMethodReceived()
запускается один раз при выполнении установки! То есть, если в первый раз, когда я вызову модальный, он вызовет событие один раз, второй раз он вызовет его дважды и так далее. Как если бы каждый раз, когда я вызываю настройку, создается новый крючок для события.
Любая идея о том, как этого избежать? Есть ли способ "отвязать" обработчик события onPaymentMethodReceived()
? Мне нужно вызвать установку несколько раз, так как каждый раз, когда я вызываю модальный, клиентToken, возможно, изменился.
Спасибо за помощь или указатель.