在设置Rails和Stripe的早期阶段遇到麻烦,我正在关注这个Railscast:http://railscasts.com/episodes/288-billing-with-stripe
尝试在提交时通过javascript(coffeescript)检测表单,但它只是提交到create操作并忽略了javascript .
这是我的coffeescript(从Railcasts借来的):
jQuery ->
Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content'))
subscription.setupForm()
subscription =
setupForm: ->
$('#new_subscription').submit ->
$('input[type=submit]').attr('disabled', true)
subscription.processCard()
false
processCard: ->
card =
number: $('#card_number').val()
cvc: $('#card_code').val()
expMonth: $('#card_month').val()
expYear: $('#card_year').val()
Stripe.createToken(card, subscription.handleStripeResponse)
handleStripeResponse: (status, response) ->
if status == 200
alert(response.id)
else
alert(response.error.message)
我已经生成了这样的形式,但对这一部分不太确定......
<%= form_tag accounts_path, {:id => 'new_subscription'} do %>
这创造了:
<form accept-charset="UTF-8" action="/accounts" id="new_subscription" method="post">
注意它确实有正确的ID . 我必须特别设置ID,即使在Ryan的教程中他似乎也没有 .
我出错的任何想法?
1 回答
我认为您应该在JavaScript控制台上查看错误 . 我想你在这里得到一个JavaScript TypeError:
JavaScript和CoffeeScript都会将变量声明提升到范围的顶部,但两者都不会提升定义 . 例如,这个CoffeeScript:
成为这个JavaScript:
所以
pancakes
存在时,我说pancakes.m()
但pancakes
仍然是undefined
,所以它没有m
方法,直到稍后我们给它赋值 . Demo将其应用于您的代码会告诉我们
subscription
是undefined
当您尝试subscription.setupForm()
时 . 尝试按正确的顺序排列:如果你看一下Railscast代码,你会发现结构是这样的:
请注意
subscription
是在jQuery ->
函数之外定义的?jQuery ->
延迟执行,直到加载页面之后,但到那时,代码的subscription = ...
部分已经执行,subscription
将具有非undefined
值 .