使用路由访问数据
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。
我有一门课程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。