【问题标题】:Add class to data received from Mongo based on a field value in Mongo, on a Meteor app在 Meteor 应用程序上,根据 Mongo 中的字段值向从 Mongo 接收的数据添加类
【发布时间】:2015-12-14 22:35:59
【问题描述】:

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

我访问文档中的所有数据并显示它。尽管如此,我很难为 my 消息提供my-message 类。当我在下面的代码中编写此代码时,它会提供 all 消息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
      }}]});
  }
});

【问题讨论】:

    标签: javascript mongodb meteor helpers spacebars


    【解决方案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();
      }
    });
    

    由于您已经在模板中循环遍历消息数组,因此帮助程序的上下文 (this) 是数组中的每个对象。您可以通过简单地比较this.fromMeteor.userId() 来确定它是否来自用户。

    【讨论】:

    • 你太棒了!我只需要在开头加上'return'。然后就成功了!
    • 是的!抱歉,我最近写了很多 Coffeescript :-)
    猜你喜欢
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多