1

我是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'
}

];

// 集合

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

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

提前致谢!

4

2 回答 2

0

为了使用最少的服务器请求在服务器端获得更好的性能和更少的压力,我建议您在服务器端而不是在客户端添加此逻辑。例如,当获取参数如 时?detail=true,服务器返回简单信息和详细数据,否则只返回简单信息。

如果您有充分的理由将它们分成不同Collection的 s,那么您必须因此获取这些集合。

于 2013-07-06T08:21:09.443 回答
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);
     ...
  });
于 2015-10-05T14:10:20.570 回答