使用Blaze在Meteor应用程序中使用Spacebars访问数组中的Object

时间:2016-02-16 10:35:30

标签: mongodb meteor meteor-blaze spacebars

我正在尝试使用Meteor平台在我的模板中迭代包含在Mongo DB文档的数组字段中的对象列表。

例如,我创建了一个具有以下JSON结构的MongoDB Posts文档集合:

 _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文件中设置了模板帮助器,并在我的HTML文件中添加了{{#each}}空格键助手。

当我尝试迭代帖子文档时,我得到了标题,描述但是无法获取我的嵌套对象(注释)的值。相反,我得到以下表达式:“对象对象”。

如何访问这些值,以便显示与帖子和添加评论的用户相关的评论?感谢

请注意:我没有使用aldeed simple-schema而不使用pub / sub模式。截至目前,我对理解框架的模板部分感兴趣。

3 个答案:

答案 0 :(得分:1)

你需要有两个{{#each}},一个用于迭代帖子,然后一个用于迭代注释,因为它们是一个数组结构,使用下面你不需要改变或者定义任何新的模板助手:

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

答案 1 :(得分: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()}
 ]

答案 2 :(得分:0)

使用meteor-blaze的类似案例,其中我有如下结构的用户数据库:

"_id": "abcdefojsdoijfodsjoijfe",
"username": "testuser",
"emails" : [ 
           { "address": "testuser@test.com",
             "verified": "false"} 
]

上面的Philip Pryde提供的嵌套式解决方案将完美地工作,因为调用数据库(如emails.address)将无法正常工作。

所以,如果我想显示用户名和电子邮件地址, 需要像下面这样做

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