我在Angular应用程序中使用Braintree Hosted Fields。当应用加载时,braintree.setup('TOKEN', 'customer', {})
按预期工作。 onReady
正确触发。
这是我的控制器:
angular.module('braintree')
.controller('BraintreeCtrl', [
function() {
var self = this;
self.setup = function() {
console.log('setup braintree');
braintree.setup('myBTtoken', 'custom', {
id: 'braintreeForm',
onReady: function() {
console.log('on ready');
},
hostedFields: {
styles: {},
number: {
selector: '#card-number',
placeholder: 'Card number'
},
cvv: {
selector: '#card-cvv',
placeholder: 'CVV'
},
expirationMonth: {
selector: '#card-expiration-month',
placeholder: 'MM'
},
expirationYear: {
selector: '#card-expiration-year',
placeholder: 'YY'
},
postalCode: {
selector: '#card-postal',
placeholder: 'Postal code'
}
}
});
}
}
]);
查看(在玉中):
form(name='braintreeForm', id='braintreeForm', novalidate, ng-init='ctrl.setup()')
.form-group
label Card Number
#card-number
.form-group
label CVV
#card-cvv
.form-group
label Expires
#card-expiration-month
.form-group
#card-expiration-year
.form-group
label Zip Code
#card-postal
button(type='submit') Submit
然而,当我离开此页面时,然后返回到BraintreeCtrl
触发的状态,onReady
永远不会触发,我无法输入任何数据。
当我以braintree形式回到状态时,如何重新设置braintree?
答案 0 :(得分:2)
我在Braintree上使用JavaScript SDK
截至目前,尚未有官方支持的机制。这是我们意识到的问题,我们将在未来的版本中提供解决方案。不幸的是,我无法为这项工作提供时间表。
与此同时,我建议您联系我们的支持团队(support@braintreepayments.com),并密切关注Github上的相关主题。同样,虽然没有官方支持的解决方案,但人们发现了一些interesting workarounds。
对不起,我没有更好的消息,但我们感谢你提出这个问题。
答案 1 :(得分:1)
在过去,braintree.setup()
只能被召唤一次而不会被淘汰。
他们现在已经实施了teardown()
功能,您可以再次拨打braintree.setup()
。
简而言之,当您想要销毁会话时调用teardown()
- 也许在离开页面时。
https://developers.braintreepayments.com/guides/client-sdk/javascript/v2#teardown https://github.com/braintree/braintree-web/issues/29