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 に答える