Backbone fetch不适用于单一模型

时间:2014-02-17 21:07:50

标签: api rest backbone.js fetch

这是我的骨干代码

var UserModel=Backbone.Model.extend({
  url: 'http://api.myapi.com/user'
});

var user=new UserModel();
user.set({id:1});
user.fetch();
console.log(user.get('screenname'));

这将返回整个用户集合,而不是id为1的用户。当我将网址更改为

url: 'http://api.myapi.com/user/1'

我找回了我想要的用户。当我user.set({id:1});

时,为什么我没有获得“用户1”的记录

注意 - 我的api位于不同的域名,这就是我在“url”属性中拥有整个网址的原因。请帮助,我准备放弃骨干。

3 个答案:

答案 0 :(得分:5)

您必须设置urlRoot而不是url,Backbone会将id添加到您网址的末尾:

var UserModel=Backbone.Model.extend({
  urlRoot: 'http://api.myapi.com/user'
});

答案 1 :(得分:0)

您需要将ID添加到您的模型网址中。

url: function() {
 if(this.id) {
   return 'http://api.myapi.com/user/' + this.id;
 } 

 return 'http://api.myapi.com/user';
}

然后当你实例化用户模型时,你可以传递一个像这样的id。

var user = new UserModel({id: 1});

然后,当您执行user.fetch()时,它将获得'http://api.myapi.com/user/1'

另外,如果未将id传递给UserModel Backbone,则会向'http://api.myapi.com/user'发送POST请求

答案 2 :(得分:0)

您需要验证两点:

  1. 模型使用urlRoot作为其他API网址,但收藏使用url
  2. fetch成功回调

    中的输出结果

    var UserModel = Backbone.Model.extend({     urlRoot:'http://api.myapi.com/user' });

    var user = new UserModel(); user.set({ID:1});

    //在成功回调中输出结果是安全的,这可以保证调用api user.fetch({success:function(){     的console.log(user.get( '屏幕名')); }});

相关问题