根据Meo应用程序中Mongo中的字段值,将类添加到从Mongo接收的数据

时间:2015-09-17 22:15:27

标签: javascript mongodb meteor helpers spacebars

我收到了mongo集合文档,其中包含一个包含大量其他对象的数组。这是一个简单的聊天应用程序。

我访问文档中的所有数据并显示它。尽管如此,我很难将my-message课程提供给我的消息。当我在下面的代码中编写代码时,它会提供所有消息my-message类。 :/

那么我做错了什么?

对象结构:

{
  _id: "RCe9ZBS9PfkwrqKvg"
  borrowerId: "Rg33iLJyRYqHyMpk4"
  messages: Array[{text:messageBody, from:currentUserId, date:New Date()}]
  ownerId: "fPv5yWJiSqFX3bAhR"
  reqId: "KXErmpFJ7LiCbKsqc"
}

模板:

  {{#with getMessages}}
    {{#each messages}}
        <p class="{{#if myMessages}} my-message {{/if}}">{{text}}</p>
    {{/each}}
  {{/with}}

助手:

Template.reqMessages.helpers({
  getMessages: function () {
    var theReqId = FlowRouter.getParam("reqId");
    return Messages.findOne({reqId: theReqId});
  },
  myMessages: function () {
    var currentUserId = Meteor.userId();
    var theReqId = FlowRouter.getParam("reqId");
    return Messages.find({reqId: theReqId, 
      messages: [{$elemMatch: {
        from: currentUserId
      }}]});
  }
});

1 个答案:

答案 0 :(得分:1)

我认为你的意思是这样做:

{{#with getMessages}}
  {{#each messages}}
    <p class="{{#if isMine}}my-message{{/if}}">{{text}}</p>
  {{/each}}
{{/with}}

Template.reqMessages.helpers({
  getMessages: function () {
    var theReqId = FlowRouter.getParam("reqId");
    return Messages.findOne({reqId: theReqId});
  },
  isMine: function () {
    return this.from === Meteor.userId();
  }
});

由于您已经在模板中循环遍历messages数组,因此帮助程序的上下文(this)是数组中的每个对象。您只需比较this.fromMeteor.userId()即可确定是否来自用户。