我正在使用角度,在angularUI模式窗口中,我想显示Braintree中的Drop In表单以获得付款方式.因此,我创建了通常的form(partial.html):
<form id="creditCard" >
<div id="dropin"></div>
<button type="submit" id="btnPay" >Pay</button>
</form>
Run Code Online (Sandbox Code Playgroud)
然后我用这个显示模态:
var modalInstance = $modal.open({
templateUrl: 'partial.html',
controller: 'ModalController'
});
Run Code Online (Sandbox Code Playgroud)
ModalController包含对Braintree设置的调用:
braintree.setup($scope.clientToken, 'dropin', {
container: 'dropin',
onPaymentMethodReceived: function (result) {
$scope.$apply(function() {
$scope.success = true;
// Do something else with result
});
}
});
Run Code Online (Sandbox Code Playgroud)
这将很好地显示braintree的Drop In表单(设置生成表单)并接受信用卡和到期日期,到目前为止一切正常.
问题是,每次调用模态时,都会执行ModalController,因此braintree.setup()也会执行.然后,当我输入信用卡号码和到期日期并点击付款时,onPaymentMethodReceived()每次设置执行都会触发一次事件!也就是说,如果我第一次调用模态,它将触发事件一次,第二次触发它两次,依此类推.就像每次调用setup时一样,会创建一个新的事件挂钩.
有关如何避免这种情况的任何想法?有没有办法"解除绑定" onPaymentMethodReceived()事件处理程序?我需要多次调用设置,因为每次调用模态时,clientToken可能已经更改.
感谢您提供帮助的任何帮助或指针.
我正在使用常见的正则表达式来验证电子邮件。模式是这样的:
(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*")@((?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?$)|\[(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}\]$
Run Code Online (Sandbox Code Playgroud)
以防万一,我确实在java中添加了所有\转义,所以这是java评估的最终模式。它适用于普通的在线正则表达式评估器,但在 Java 中运行时会抛出
java.util.regex.PatternSyntaxException:索引 103 附近非法/不受支持的转义序列
这是 \177 代码。为什么会这样,为什么该代码是非法的,为什么它可以在在线验证器中工作?