0

我正在使用backbone.js 来实现一个带有facebook 登录按钮的登录页面。

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" }
                 );


    }                         

});

这行得通,我可以使用我的 Facebook 应用程序登录。但是登录后我希望触发 FB.event.subscribe 。但我不知道如何用backbone.js 来实现它

FB.Event.subscribe('auth.login', function(response) {   
    Backbone.history.navigate("#locallist",true)
});
4

1 回答 1

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 事件时才会渲染或侦听事件。

于 2012-05-11T09:45:57.220 回答