导轨和条纹付款

时间:2013-09-09 20:56:20

标签: javascript ruby-on-rails coffeescript stripe-payments

在设置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 个答案:

答案 0 :(得分:1)

我认为您应该在JavaScript控制台中查看错误。我认为你在这里得到了一个JavaScript TypeError:

subscription.setupForm()

JavaScript和CoffeeScript都会将变量声明提升到范围的顶部,但两者都不会提升定义。例如,这个CoffeeScript:

pancakes.m()
pancakes =
    m: -> console.log('pancakes')

成为这个JavaScript:

var pancakes;

pancakes.m();

pancakes = {
  m: function() {
    return console.log('pancakes');
  }
};

所以当我说pancakespancakes.m()存在pancakes,但undefined仍然是m,因此它直到我们分配时才会有subscription方法它是一个价值。 Demo

将其应用于您的代码会在您尝试undefined时告诉我们subscription.setupForm()jQuery -> Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content')) subscription = ... subscription.setupForm() 。尝试按正确顺序排列:

jQuery ->
  Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content'))
  subscription.setupForm()

subscription = #...

如果你查看Railscast代码,你会发现结构是这样的:

subscription

请注意,jQuery ->是在jQuery ->函数之外定义的吗? subscription = ...延迟执行,直到加载页面为止,但到那时,代码的subscription部分已经执行,undefined将具有非{{1}}值