2012-01-29 56 views
1

我試圖將AJAX回調函數綁定到某個範圍,我做錯了什麼?針對AJAX調用的JavaScript綁定

這裏是我的代碼:

var MainApp = { 
    files:{ 
     "A":{ 
      url:"files/a.json", 
      content:"" 
     }, 
     "B":{ 
      url:"files/b.json", 
      content:"" 
     } 
    }, 
    init:function() { 
     this.loadFiles(); 
    }, 
    loadFiles:function() { 
     for (var i in this.files) { 
      var f = function (data) { 
       console.log("callback",this); 
      }; 
      console.log("binding",this); 
      f.bind(this); 
      $.get(this.files[i].url, f); 
     } 
    } 
}; 

$(function() { 
    MainApp.init(); 
}); 
+1

究竟是什麼問題? – JJJ 2012-01-29 10:58:05

+0

你試圖給回調的範圍是什麼? – Jivings 2012-01-29 10:58:12

+0

感謝您的回覆,問題在於f回調中的「this」是窗口。 我想要的是,當調用回調時,「this」將是我的MainApp對象,而不是窗口......問題已解決;) – 2012-01-29 16:35:17

回答

1
f.bind(this); 

Function#bind不會改變原有的功能,它將返回綁定到參數的新功能。您的意思可能是:

f= f.bind(this); 
+0

沒錯,謝謝! – 2012-01-29 11:16:33

0

請改用電話:

that = this; 
$.get(this.files[i].url, function() { 
    f.call(that) 
});