2016-02-16 3 views
0

Я пытаюсь перебрать в моем шаблоне список объектов, включенных в поле массива документа Mongo DB, используя платформу Meteor.Доступ к объекту в массиве с использованием Blaze с использованием Spacebars в приложении Meteor

Так, например, я создаю коллекцию MongoDB сообщений документов со следующей структурой JSON:

_id: "xyxyxyxy", 
title: "my first post", 
description: "a very intresting post", 
comments:[ 
      {comment:"a very cool post"},{createdBy: Meteor.userId()}, 
      {comment:"I don't like this post"},{createdBy: Meteor.userId()} 
      ] 

Каждый авторизованы пользователь может добавить комментарий, который будет указан под заголовком и описание одного после подробного просмотра.

Таким образом, я установил свой помощник шаблона в свой файл js и добавил {{#each}} помощник космонавтов в свой HTML-файл.

Когда я пытаюсь выполнить итерацию почтового документа, я получаю заголовок, описание, но не могу получить значения моих вложенных объектов (комментарии). Вместо этого я получаю следующее выражение: «Объект объекта».

Как получить доступ к этим значениям, чтобы я мог показывать комментарии к сообщению и пользователю, добавившему комментарий? Спасибо

Обратите внимание: я не использую простую схему с альдегированием и не использую шаблон pub/sub. На данный момент меня интересует шаблонная часть структуры.

+0

вы также должны изменить свою внутреннюю структуру объекта, это не имеет смысла, чтобы на отделенной объект комментарии и CreatedBy , посмотрите на мой ответ, чтобы получить хорошую структуру. –

ответ

0

Это нормально, я не знаю, почему вы завернуты свой внутренний объект комментария в массив, вы должны иметь такую ​​структуру:

_id: "xyxyxyxy", 
title: "my first post", 
description: "a very intresting post", 
comments:[ 
      {comment:"a very cool post",createdBy: Meteor.userId()}, 
      {comment:"I don't like this post",createdBy: Meteor.userId()} 
] 
+0

Да, извините. Ты прав. Я ошибся при написании вопроса. Но проблема все еще существует. Я не могу повторять и получать эти значения. Как бы вы установили помощник шаблона javascript и html-шаблон с помощью пробелов? –

+0

Покажите мне свой шаблон и связанные с ним js. Не забывайте менять структуру. –

1

Вам нужно будет иметь два {{#each}}, один перебрать сообщений, а затем один внутри, что перебрать комментарии, потому что они находятся в структуре массива, используя ниже вы не должны изменять или определять новые хелперы шаблона:

{{#each posts}} 
    {{title}} 
    {{description}} 
    {{#each comments}} 
    {{createdBy}} 
    {{comment}} 
    {{/each}} 
{{/each}} 
0

аналогичный случай с использованием meteor-blaze, где у меня есть база данных пользователей со структурой вроде ниже:

"_id": "abcdefojsdoijfodsjoijfe", 
"username": "testuser", 
"emails" : [ 
      { "address": "[email protected]", 
      "verified": "false"} 
] 

Вложенное каждое решение, подобное предоставленному Филиппом Прайдом выше, отлично работает, поскольку вызов для базы данных, такой как адрес электронной почты, не будет работать.

Так что, если я хочу, чтобы отобразить имя пользователя и адрес электронной почты, нужно сделать, как показано ниже

{{#each usernames}} 
<p>your username: {{username}}</p> 
{{#each emails}} 
<p>your email: {{address}}</p> 
{{/each}} 
{{/each}}