我有一个模型的问题,我使用一些默认值进行实例化,我使用set()
方法更改它,当我使用fetch()
méthod时,我得到默认值值而不是新值,我试图在控制台中记录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'});
},
谢谢!
答案 0 :(得分:1)
由于您的网址方案不是默认的“/ object / id”,因此您应该更新网址:
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');
}
});
答案 1 :(得分:0)
Backbone基于设置为模型的id属性的任何内容进行提取。实例化新用户时,默认情况下id设置为1。当你调用fetch时,Backbone会尝试根据urlRoot获取(因为它不是集合的一部分),而不是URL: HTTP:/本地主机:3000 /用户/ 1
http://backbonejs.org/#Model-url
http://backbonejs.org/#Model-urlRoot
如果您希望根据某些非id属性进行提取,则可能需要考虑重写Backbone的提取。
答案 2 :(得分:0)
我浪费了差不多一个小时的时间。您需要注意的是模型在获取成功方法之后得到更新,
CurrentUser.fetch({
success: function(_model){
console.log(_model);
}