我是backbonejs的新手,我正在做一些项目,包括获取和显示朋友列表。对于这个项目,我使用parse.com作为数据库。但此时我已经存货了。
例如:我在用户和朋友模型中有以下数据。
var user = [
{
id: 'x1',
firstname: 'Ashik',
lastname: 'shrestha',
phone: '12321321',
mobile: '123213',
email: 'xyz@gmail.com'
},
{
id: 'x2',
firstname: 'rokesh',
lastname: 'shrestha',
phone: '12321321',
mobile: '123213',
email: 'rokesh@gmail.com'
},
];
var friends = [
{
user_id: 'x1',
user_friend_id: 'x2'
},
{
user_id: 'x1',
user_friend_id: 'x4'
},
{
user_id: 'x1',
user_friend_id: 'x10'
},
{
user_id: 'x2',
user_friend_id: 'x25'
}
];
// collections
var userCollection = Backbone.collection.extend({
model: user
});
var friendListCollection = Backbone.collection.extend({
model: friends
});
var friends = new friendListCollection();
现在我想要什么?
当我获取朋友收藏对象时,我希望获得用户的朋友列表以及他们的详细信息。
示例:
friends.fetch({
success: function(ob){
var ob =ob.toJSON();
// i want ob to be like
[
{
id: 'x2',
firstname: 'rokesh',
lastname: 'shrestha',
phone: '12321321',
mobile: '123213',
email: 'rokesh@gmail.com'
},
{
id: 'x4',
firstname: 'rokesh',
lastname: 'shrestha',
phone: '12321321',
mobile: '123213',
email: 'rokesh@gmail.com'
},
{
id: 'xx10',
firstname: 'rokesh',
lastname: 'shrestha',
phone: '12321321',
mobile: '123213',
email: 'rokesh@gmail.com'
},
]
}
});
我应该创建新的集合来关联它们还是有其他方法可以做到这一点?
提前致谢!
答案 0 :(得分:0)
要使用最少的服务器请求来获得更好的性能和更低的服务器压力,我建议您在服务器端添加此逻辑,而不是在客户端添加此逻辑。例如使用?detail=true
等参数进行提取时,服务器会返回包含详细数据的简单信息,否则只返回简单信息。
如果你有充分的理由将它们分成不同的Collection
,那么你必须获取这些集合。
答案 1 :(得分:0)
假设您不希望更改数据结构,可以使用BackboneJS模型的idAttribute属性,通过特定键(通常为“id”)从集合中检索特定模型。
定义模型时,还应该为模型定义 idAttribute ,稍后将允许您通过此字段的值从集合中访问它。
当同步Backbone集合时,所有模型都会根据其定义的结构进行解析,并在其数据之上添加管理功能。
考虑以下示例:
var myModel = Backbone.Model.extend({
idAttribute: "id"
...
});
var myCollection = Backbone.Collection.extend({
model: myModel
...
});
一旦myCollection持有一个或多个“myModel”,您就可以使用以下内容:
var myModelFromMyCollection = myCollection.get(id);
模型的idAttribute可以通过任何模型的字段......
对于您的用例,我们假设friendListCollection和userCollection都已经可用并且其中包含模型,请考虑以下代码以从其用户模型中获取每个朋友的完整详细信息,如下所示:
friendListCollection.each(function(friendModel) {
var friendFullDetailsFromUsersCollection = userCollection.get(friendModel.id);
console.log(friendFullDetailsFromUsersCollection);
...
});