如何创建 Meteor Template Helper 来检查相等性?

How Do I Create Meteor Template Helper to Check Equality?

我正在制作一个聊天网络应用程序。 人们可以使用 facebook 登录并交谈(将消息插入 mongoDB)。

显示文本很简单: javascript:

  messages: function () {
    return Messages.find({}, {sort: {createdAt: 1}});
  } 

每条消息都有这些属性:

text: text,
      createdAt: new Date(),            // current time
      owner: Meteor.userId(),           // _id of logged in user
      username: Meteor.user().profile.name

它工作正常,但我想 "style the message differently" 取决于 消息的所有者是否等于 currentUser(即是我的消息还是其他消息)

例如,我希望我的消息是float:right,其他人的消息是float:left

我认为代码可能如下所示:

  {{#if mymsg}}
    <div class="msgdiv_my">
       <span class="message">{{text}}</span>
    </div>
  {{else}}
    <div class="msgdiv">
      <span class="message">{{text}}</span>
    </div>
  {{/if}}

在哪里以及如何编写 mymsg 函数(return 如果 message.owner == currentUser 为真,否则为假)

您通常会在模板助手中编写这些检查,如下所示:

Template.myTemplate.helpers({
  ownDocument: function (doc) {
    return doc.owner === Meteor.userId();
  }
});

然后在myTemplate中,这样调用你的助手:

<template name="myTemplate">
  {{#if ownDocument text}}
    <div class="msgdiv_my">
       <span class="message">{{text}}</span>
    </div>
  {{else}}
    <div class="msgdiv">
      <span class="message">{{text}}</span>
    </div>
  {{/if}}
</template>

尽管您可能希望为您的 Meteor 应用程序的客户端实现一个全局 "equals" 助手,但不幸的是它还没有内置在 Meteor Spacebars 中:

Template.registerHelper('equals',
    function(v1, v2) {
        return (v1 === v2);
    }
);

这样,您可以调用:

{{#if equals text.owner currentUser._id}}

得到相同的结果。

KyleMit 为您在 Meteor 中的所有相等性检查需求写了 a lengthy answer