使用路由访问数据

access data with routes

我有一门课程collection

{courses{{course1_title,id,author,pages[{title,content,model, etc...},
              [ etc...]{course2,....}}

我正在尝试通过路由器

在课程 collection 中显示当前页面的数据
this.route('page', {
    path: '/:title',
    data: function() {
    return courses.findOne({'pages.title':this.params.title};

    }

});

我想这样显示当前页面的数据:

<template name="page">
<div class ="container page">
    <h1>Page</h1>
    <!--display current page data -->
    <h3>{{title}}</h3>
    <div>{{ an other content}} etc..... </div>  
</div>

目前,路由器 returns 整个课程的数据和显示的标题是课程的标题。我找不到如何访问当前页面的数据以便在页面的模板中显示它。

我试过了

return courses.findOne({'pages.title':this.params.title}{fields:{{'pages.title':this.params.title}:1}}   

以及许多其他方式。我没找到。

正确的方法是什么?

您当前的查询将在所有课程中搜索匹配的页面标题,然后 return 整个课程(包括所有页面)

您应该 return 只有相关页面的数据:

course = courses.findOne({pages: { $elemMatch: { title: this.params.title }});
return course.pages[0]

顺便说一句,最好为页面创建一个单独的 collection(每个页面都链接回课程 ID)。虽然少了 "Mongo",但 Meteor 只能在 collection 秒内进行反应式操作,而不是 sub-documents。