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 変数にアクセスできる方法はありますか、それともグローバル変数を使用する必要がありますか?