Braintree onReady没有在Angular应用程序中触发

时间:2015-06-10 22:28:36

标签: angularjs braintree

我在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?

2 个答案:

答案 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