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

Iterating array-elements as single values inside collection-document (Meteor)

我正在尝试创建在线聊天列表。每当有人进入房间时,他的昵称就会被推入数组 inRoom 中,当他离开时,昵称又会被拉出。到目前为止效果很好。虽然在实际列表中显示数组让我感到困惑。

我需要将名称分开以便将它们放入锚标记中,因为这些名称是 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

感谢您的帮助

Could someone show me how to iterate the single values of the array so they will display like ...

字段inRoom本身就是一个数组,所以你需要第二个each:

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

如果反正只有一个房间显示,你甚至可以将代码更改为return当前的单人房间:

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

其中 return 只有一个房间文件的名称,不需要重复。然后您可以通过以下方式访问它:

<template name="onlineliste">
  {{#with roomData}}
    <ul>
      {{#each name in this}} 
        <li>{{name}}</li>
      {{/each}}
    </ul>
  {{/with}}
</template>