2012-01-29 94 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) 
});