我正在尝试列出与相关用户的一些帖子。每个帖子都有一个标题,一个像这样的userId:
[{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"text": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}]
如何将我的帖子模型与用户模型联系起来?它的工作方式就像我在下面尝试过的那样,但它很快又脏。我需要使用骨干关系吗?我只是不知道在我的应用程序中,骨干关系是否仅仅是一对二关系的过度杀伤。
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'
});
编辑2:以下解析函数是否可能因为我无法更改其余的api。
parse: function(response) {
user = BackboneApplication.request("user:entity", response.userId)
this.user = new User(user);
return response'
}
答案 0 :(得分:1)
一种选择是让您的帖子服务返回完全加载" 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 suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum 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
}