我正在使用backbone.js来实现一个带有登录按钮的登录页面。
window.LoginPage = Backbone.View.extend({
initialize:function () {
this.template = _.template(tpl.get('login-page'));
},
render:function (eventName) {
$(this.el).html(this.template(this.model.toJSON()));
this.bind("nav", this.nav,this);
this.model.bind("reset", this.render, this);
return this;
},
events:{
"click #login":"login"
},
login:function(){
FB.login(
function(response) {
if (response.authResponse) {
console.log('Welcome! Fetching your information.... ');
FB.api('/me', function(response) {
console.log('Good to see you, ' + response.name + '.');
}
);
} else {
console.log('User cancelled login or did not fully authorize.');
}
},
{ scope: "email" }
);
}
});
这有效,我可以使用我的脸书应用登录。但登录后我想要触发FB.event.subscribe。但我不知道如何使用backbone.js
实现这一点FB.Event.subscribe('auth.login', function(response) {
Backbone.history.navigate("#locallist",true)
});
答案 0 :(得分:1)
不确定你的意思是“我想要触发FB.event.subscribe”。如果窗口上有FB对象,则可以在任何地方开始绑定事件。
我认为你的问题是你不能保证何时或者FB对象是否在窗口上,所以我在我的应用程序中的东西是创建一个全局事件并使我的应用程序听取该事件。这是CoffeeScript中的一些伪代码:
class FacebookServiceProvider extends ServiceProvider
constructor: ->
super
initialize: (options) ->
FB.init
appId: appId,
status: true,
cookie: true,
xfbml: true,
oauth: true
app.trigger 'facebook:initialized'
window.facebookInitialized = true
@
class FacebookView extends Backbone.View
initialize: (options) ->
if window.facebookInitialized
onFacebookInitialized.call @
app.on 'facebook:initialized', @onFacebookInitialized, @
@
onFacebookInitialized: =>
FB.Event.subscribe 'auth.authResponseChange', (response) -> console.log response
@
基本上只是在窗口上使用全局变量来查看facebook服务提供程序是否已经初始化,如果是这样,根据状态,我的视图将只在可以的时候才会呈现或收听FB事件。