将数组元素迭代为集合文档(流星)中的单个值

时间:2019-06-08 13:39:16

标签: meteor meteor-blaze

我正在尝试创建聊天的在线列表。每当有人进入房间时,他的昵称就会被推入“房间”中的数组,当他离开房间时,其昵称会再次被拉出。到目前为止,这个工作正常。在实际列表上显示数组虽然使我感到困惑。

我需要将名称分开以便将它们放入锚标记中,因为这些名称是url参数。

房间文档如下:

{
  "_id": "crsEES5d22uYJiqDZ",
  "name": "Room",
  "roomdesc": " ",
  "inRoom": [name1, name2, name3],
  "createdAt": "2019-06-08T12:39:51.382Z",
  "owner": "Kuroki"
}

我有一个帮助程序来获取数组。我使用getParam获取房间的名称,以便找到合适的房间。

Template.onlineliste.helpers({
  roomData() {
    var name = FlowRouter.getParam('name');
    return Channels.find({name:name}, {sort: {createdAt: 1}})
  },
});

然后我尝试迭代哪一个当然将整个数组而不是每个名称都显示为单个值

<template name="onlineliste">
    {{#each roomData}}
    {{inRoom}} 
    {{/each}}
  </template>

有人可以告诉我如何迭代数组的单个值,以便它们显示为

  • 名称1
  • 姓名2
  • 姓名3

代替名称1,名称2,名称3

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

  

有人可以告诉我如何迭代数组的单个值,以便它们显示为...

字段updatedAt本身是一个数组,因此您需要第二个inRoom

each

如果仅显示一个房间,您甚至可以更改代码以返回当前的单个房间:

<template name="onlineliste">
  {{#each room in roomData}}
    <ul>
      {{#each name in room.inRoom}} 
        <li>{{name}}</li>
      {{/each}}
    </ul>
    {{/each}}
</template>

,仅按名称返回一个房间文档,并且不需要进行迭代。然后,您可以通过以下方式访问它:

Template.onlineliste.helpers({
  roomData() {
    var name = FlowRouter.getParam('name');
    return Channels.findOne({name:name}})
  },
});