我有一个名为 User
的主干模型,它有一个 /api/users
的 urlRoot
。因此,如果我创建一个 ID 为 5 的新模型,则 url 将为 /api/users/5
。
我还实现了另一个端点,用于获取单个用户的 Twitter 好友。这个端点是 /api/users/:id/twitter-friends
我是否需要使用此 url
创建一个新集合,并手动设置 id
,或者我是否可以以某种方式在我的模型上创建一个方法来发出此请求并返回一个新的集合实例(该用户的 Twitter 好友)。例如:
var user = new User({ id: 5 })
user.findTwitterFriends() // returns collection of users
或者,为此类数据制作一个唯一的集合:
var user = new User({ id: 5 })
var users = new Users()
users.url = user.url() + '/find-friends/twitter' // /api/users/5/find-friends/twitter
users.fetch()
以这种方式处理 URL 的最佳实践是什么?有没有更好的办法?我对其他用途也有类似的需求,例如我的 API 端点可以通过 /api/users/username/:username
中的用户名获取用户。为此,我必须手动设置 urlRoot:
var user = new User({ username: username })
user.urlRoot = user.urlRoot + '/username/' + username
user.fetch()
也许我应该设计不同的 URL?我愿意接受所有建议。
最佳答案
根据我的经验,即使在模型中,它也是覆盖 Backbone.sync 的最佳方式。
查看Backbone Model.fetch !你可以看到它需要 [options] 。 所以从我的头顶我会说这将是一种更清洁的方式。您甚至可以仅覆盖与您的获取用户的 Backbone 同步,并让 Backbone 处理 getUsers。
/*
this method is redundant.I added it to show you can add options as you go.
*/
getUsers : function() {
this.fetch({
action = 'getUsers';
});
}
getUser : function(username) {
this.fetch({
action = 'getSingleUser'.
username = username;
});
},
sync : function(method, model, options) {
if(method === 'read'){
if(options.action === 'getSingleUser') {
this.url = '/username/' + options.username;
}
else this.url = '/find-friends/twitter';
ret = Backbone.sync.apply(this, arguments);
return ret;
}
else{
return Backbone.sync.call(this, method, this, options);
}
}
关于javascript - 主干模型和 URL 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16460783/