我正在接近一个朋友"收集正确的方法?

时间:2014-04-28 21:19:51

标签: meteor

我希望我的应用程序能够让用户与另一个用户成为朋友。发送好友请求,然后另一个人可以选择是否接受。我希望有两个不同的列表,第一个列表是用户朋友,第二个列表是向他或她发送朋友请求的人。目前我有一个朋友收藏:

Friends = new Meteor.Collection("friends");

我创造朋友的方式是:

Template.friend.events({
    'click #addFriend': function(e, t) {
        var email = $("#friendEmail").val();
        var friend = Meteor.users.find({ "email.address" : email });
        if (friend) {
             return Friends.insert({friend1:Meteor.userId(),
                                    friend2:friend._id,
                                    name: email,
                                    stat: 'Pending'});
        }
    }
});

现在我有点陷入困境,我现在有一个模板来检索朋友:

Template.friend.friends = function () {
    return Friends.find({friend1: Meteor.userId()});
}

然后我的html:

{{#each friends}}
  <div class="row">
    <div class="... columns">
      <p>{{name}} {{stat}}</p>
    <div class="... columns">
      <p>{{name}} {{stat}}</p>
    </div>
   </div>
{{/each}}

渲染好友。

但问题是:如何确保朋友2可以接受任何请求,以及如何创建两个单独的列?更重要的是,我觉得这是一种不正确的做事方式,我是否应该以这种方式接近它?

编辑:

我已经摆脱了Friends集合并按照凤凰协议制作了一个Notifications集合,我创建了以下内容来测试它是否可行:

Template.friends.sent = function() {
    return Notifications.find({from: Meteor.user(),
                               type: "friendship"
                              });
}

使用以下html:

{#each sent}
  <p>{{to.emails.0.address}}</p>
{/each}

但它返回错误说:

Expected IDENTIFIER

1 个答案:

答案 0 :(得分:3)

保留两个集合:

Meteor.usersNotifications

当您发送好友请求时,请在Notificationstype : friendshipstatus : pendingfrom : user1to : user2上注册。

然后,在用户配置文件中,您可以查询user2的待处理通知,无论他们是谁。如果user2接受,则在集合Meteor.users上为user1注册。处理完请求后,无论是否接受,您都可以删除该通知。

事实上,我甚至可以从集合status中取出属性Notificationts,因为在这种方法中,无论如何都可以删除它们。

关于两列模板。您使用的是Bootstrap还是普通的CSS?

使用Bootstrap(在这种情况下为3):

<div class="row">
  <div class="col-xs-6">{{columnOne}}</div>
  <div class="col-xs-6">{{columnTwo}}</div>
</div>

使用纯CSS

.row { width: 100%; }
.column { width: 50% }