backbonejs - 获取多个模型

时间:2013-07-06 04:31:04

标签: backbone.js backbone-relational backbone-collections backbone-model

我是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'
        },
    ]
    }
});

我应该创建新的集合来关联它们还是有其他方法可以做到这一点?

提前致谢!

2 个答案:

答案 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);
     ...
  });