0

Stripe 支払いシステムを使用している Backbone.js に Web アプリケーションがあります。

これはモデル コードの一部です。

App.Models.Payment = Backbone.Model.extend({

defaults: {
    id:null
},

url: function() {
    // code
},

initialize:function(){      
    this.id='';
    this.saveClicked= false;
    this.saveDetailsChecked= true;
}

このモデルは、次のビューで使用されます。

App.Views.BillingView = Backbone.View.extend({

el: '#billing-fields',

events: {
    'click #billing-footer-buttons .navigation .confirm-btn': 'saveCardClicked'
},

initialize:function(models, options) {
    Stripe.setPublishableKey('**********************');
    var self = this;
},

saveCardClicked:function(e) {
    e.preventDefault(); 
    if (this.model.saveClicked) return false;
    this.model.saveClicked = true;
    var $form = $('#payment-form');
    Stripe.createToken($form, this.stripeResponseHandler);
},

cancelClicked:function() {
    vent.trigger('showScreen', 'subscribe-container');
},

stripeResponseHandler:function(status, response) {
    var $form = $('#payment-form');
    self.saveDetailsChecked = document.getElementById("billing-checkbox").checked;
    var atr1 = document.getElementById("billing-card-number").value;
    var atr2 = self.model.savedCard;
    if(document.getElementById("billing-card-number").value == self.model.savedCard){
        self.model.set('use_saved_card','1');
        vent.trigger('doPayment');
    }else{
        if (response.error) {
            // code
        } else {
            // code
        }
    }
    self.saveClicked = false;
}
});

saveCardClicked 関数では、saveClicked 変数のようにモデルから変数にアクセスできます。

しかし、stripeResponseHandler では、モデルから 'saveClicked' 変数にアクセスできません。この関数では、これはウィンドウを参照し、初期化関数で定義されている自己変数にもアクセスできません。

stripResponseHandler は、Stripe API から呼び出されます。

stripResponseHandler 関数で savedCard 変数にアクセスできる方法はありますか、それともグローバル変数を使用する必要がありますか?

4

2 に答える 2