我正在尝试列出一些与他们相关的用户的帖子。每篇文章都有一个标题,一些文本和一个userId,像这样:
[{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"text": "quia et suscipitnsuscipit recusandae consequuntur expedita et cumnreprehenderit molestiae ut ut quas totamnnostrum rerum est autem sunt rem eveniet architecto"
}]
如何将帖子模型与用户模型关联起来?它的工作原理就像我下面试过的一样,但它又快又脏。我需要使用主干关系吗?我只是不知道在我的应用程序中,对于一个1,2 -many关系来说,主干关系是否太过了。
var fetchingPosts = BackboneApplication.request("post:entities");
var postsListLayout = new List.Layout();
$.when(fetchingPosts).done(function(posts){
$.each(posts.models, function(i, post){
var username = BackboneApplication.request("user:entity", post.get("userId"));
$.when(username).done(function(user){
post.set("name",user.get("name"));
});
});
var contactsListView = new List.Posts({
collection: posts
});
编辑由于这个问题,我的帖子模型看起来像这样:
Entities.Post = Backbone.Model.extend({
url : "url_to_rest_api",
idAttribute : 'id'
});
EDIT 2:这是以下解析函数可能的事实,我不能改变我的rest api。
parse: function(response) {
user = BackboneApplication.request("user:entity", response.userId)
this.user = new User(user);
return response'
}
一个选择是让你的posts服务返回完全加载的"Post"模型,如下所示:
[{
//not just an id anymore
"user": {"id":1, "username":"Fred", "email":"bob@bob.com"},
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"text": "quia et suscipitnsuscipit recusandae consequuntur expedita et cumnreprehenderit molestiae ut ut quas totamnnostrum rerum est autem sunt rem eveniet architecto"
}]
然后在你的Post模型的解析方法中,你可以做以下事情:
parse: function(response) {
//convert raw user json to backbone model
response.user = new User(response.user);
return response'
}
这避免了关系依赖,但要求rest端点用所有post数据加载用户数据。你可以让你的端点是特定的但让你的服务层是通用的所以post和user的概念仍然是松散耦合的
//pseudo
def getPost(id) {
def post = postService.getPost(id);
post.user = userService.getUser(post.userid)
render post as json
}