在我的index.html中,我调用了Facebook SDK。在那里,我有以下代码在我的Backbone应用程序中触发控制器。
触发器运行一个函数,该函数调用获取登录用户的FB.api()
。
骨干代码的第一个例子工作得很好,但是第二个有一个我传递数据的中间函数,但它从facebook all.js
文件中得到了一个错误。
想要中间功能的原因是以后能够以不同的顺序触发它们。
Facebook SDK:
FB.Event.subscribe("auth.statusChange", function (response) {
MyApp.trigger("fb:initialize", response);
});
backbone.js控制器代码工作:
initialize: function() {
App.on("fb:initialize", this.getUser);
},
getUser: function(event) {
if (event.status === "connected") {
FB.api("/me", function (response) {
if (response && !response.error) {
console.log(response);
}
});
} else {
//do nothing
}
}
backbone.js控制器代码 NOT WORKING :
initialize: function() {
App.on("fb:initialize", this.testFunction);
},
testFunction: function(event) {
var status = event.status;
this.getUser(status);
},
getUser: function(status) {
if (status === "connected") {
FB.api("/me", function (response) {
if (response && !response.error) {
console.log(response);
}
});
} else {
//do nothing
}
}
到目前为止,我尝试使用我认为称为“闭包”的东西。由于FB.api()是异步的,this
与window
而不是当前对象相关。所以我尝试在调用之外将变量设置为this
。但它也行不通。
例如:
var oThis = this;
var apiString = '/' + this.model.id + '/photos';
FB.api(apiString, function(response){
loadPhoto(response, 1, oThis.model);
});
答案 0 :(得分:0)
尝试
initialize: function() {
var _this = this;
App.on("fb:initialize", function(event) {
_this.getUser(event.status);
});
},
getUser: function(status) {
if (status === "connected") {
FB.api("/me", function (response) {
if (response && !response.error) {
console.log(response);
}
});
} else {
//do nothing
}
}
或者使用下划线.bind()
始终绑定到右侧。 http://underscorejs.org/#bind