0

モデルに問題があります。いくつかのデフォルト値を使用してインスタンス化し、メソッドを使用してモデルset()を変更しています。方法を使用するとfetch()、新しい値の代わりにデフォルト値を取得myModel.toJSON()し、コンソールにログインしようとしました。新しい値が表示myModel.fetch()されたら、起動します。サーバー側でデフォルト値を取得します。

モデルのプロトタイプは次のとおりです。

window.User = Backbone.Model.extend({
    defaults : {
        id : "1",
        username : "anonymous",
        facebook_id : "1235486421",
        facebook_token : "AEZH93FZFEFSFSFS4545154sfsfSF"
    },
    urlRoot: 'http:/localhost:3000/user',
    initialize : function() {
        console.log('User Constructor...');
        this.url = "http://localhost:3000/user/"+this.get('username')+'/'+this.get('facebook_id')+'/'+this.get('facebook_token');
    }
});

これが私が使用するコードの塊ですfetch()

    fetch_user: function(){
    var CurrentUser = new User();
    FB.login(function(response) {
        if (response.authResponse) {
            var access_token = response.authResponse.accessToken;
            FB.api('/me', function(response) {
                console.log('Good to see you, ' + response.name + ', id: '+response.id+', token: '+access_token);
                CurrentUser.set('username', response.name);
                CurrentUser.set('facebook_id', response.id);
                CurrentUser.set('facebook_token', access_token);
                console.log('Current user is:  ' + CurrentUser.toJSON());
                CurrentUser.fetch({
                    success: function(_model){
                        console.log('User fetched successfully');
                    },
                    error: function(_model, error){
                        console.log('User fetched unsuccessfully');
                    }
                });
            });
        }
        else {
            console.log('User cancelled login or did not fully authorize.');
        }
    }, {scope: 'email'});
},

ありがとう !

4

3 に答える 3

1

URLスキームはデフォルトの「/object/ id」ではないため、URLを更新する必要があります。

window.User = Backbone.Model.extend({
    defaults : {
        id : "1",
        username : "anonymous",
        facebook_id : "1235486421",
        facebook_token : "AEZH93FZFEFSFSFS4545154sfsfSF"
    }, events {
        "change" : "updateUrl"
    },
    initialize : function() {
        console.log('User Constructor...');
        this.updateUrl();
    },
    updateUrl : function() {
        this.url = "http://localhost:3000/user/" +
                   this.get('username') +
                   '/'+this.get('facebook_id') + 
                   '/'+this.get('facebook_token');
    }
});
于 2012-10-11T19:04:51.957 に答える
0

バックボーンは、モデルのid属性として設定されているものに基づいてフェッチします。新しいユーザーをインスタンス化すると、デフォルトでIDが1に設定されます。fetchを呼び出すと、BackboneはURLではなくurlRootに基づいてフェッチを試みます(コレクションの一部ではないため):http:/ localhost:3000 / user / 1

http://backbonejs.org/#Model-url

http://backbonejs.org/#Model-urlRoot

id以外の属性に基づいてフェッチする場合は、Backboneのフェッチをオーバーライドすることを検討する必要があります。

于 2012-10-11T18:52:05.467 に答える
0

私は同じことでほぼ1時間を無駄にしました。注意する必要があるのは、フェッチ成功メソッドの後にモデルが更新されることだけです。

 CurrentUser.fetch({
                success: function(_model){
                  console.log(_model);
 }
于 2012-12-06T22:18:13.617 に答える