Перебор элементов массива как отдельных значений внутри коллекционного документа (Метеор) - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь создать онлайн-список для чата. Всякий раз, когда человек входит в комнату, его псевдоним помещается в массив 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

вместо Name1, Name 2, Name 3

Спасибо за любую помощь

1 Ответ

2 голосов
/ 08 июня 2019

Может кто-нибудь показать мне, как перебирать отдельные значения массива, чтобы они отображались как ...

Поле 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}})
  },
});

, которая возвращает только однуНомер документа по имени и не требует повторения.Затем вы можете получить к нему доступ через следующее:

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