我正在听取一些建议,请使用Iron Router为MongoDB数据库设置数据上下文的最佳方法。
解释我正在开展一个相当基本的电影评论项目,并在http://reviews-48062.onmodulus.net/
部署到Modulus这会返回一个评论列表,但是想使用路由来创建其他页面。我已经在本地安装了Iron Router,并且有一个本地MongoDB集合(称为任务),其中包含一些数据。
重写了一些代码以包含路由信息。这可以成功地显示路由,但似乎不会将任何数据引入{{each}}语句。
我的JS代码如下:
// define Mongodb collection
Tasks = new Mongo.Collection("tasks");
// set up home route and database query
Router.route('/', function () {
this.render('Home', {
tasks: function () { return Tasks.find({}, {sort: {title: 1}, limit: 10}); }
});
});
// define routes
Router.route('/one');
Router.route('/two');
Router.route('/three');
HTML代码为:
<head>
<title>Iron router sandbox</title>
</head>
<body>
</body>
<template name="Home">
{{> Nav}}
<h1>Home</h1>
<p>This is a test</p>
{{#each tasks}}
<li>
<strong>{{title}}</strong>
<p>Directed by {{director}}</p>
<p>{{review}}</p>
<p>Available on: {{format}}</p>
</li>
{{/each}}
</template>
<template name="One">
{{> Nav}}
<h1>Page One</h1>
<p>Some more text.</p>
</template>
<template name="Two">
{{> Nav}}
<h1>Page Two</h1>
<p>A bit more text.</p>
</template>
<template name="Three">
{{> Nav}}
<h1>Page Three</h1>
<p>Even more text.</p>
</template>
<template name="Nav">
<ul>
<li>
<a href="/">Home</a>
</li>
<li>
<a href="/one">Page One</a>
</li>
<li>
<a href="/two">Page Two</a>
</li>
<li>
<a href="/three">Page Three</a>
</li>
</ul>
</template>
我的理解是数据上下文是为“Home”模板设置的,所以不确定代码有什么问题。
任何建议都非常感谢。
答案 0 :(得分:0)
tasks
不是发送给该对象的有效属性。您需要使用data
为IronRouter设置数据上下文。将tasks
更改为data
,然后在模板上设置帮助程序以获取任务数据:
Template.Home.helpers({
tasks() {
return Tasks.find({}, {sort: {title: 1}, limit: 10});
}
});
答案 1 :(得分:0)
您可以使用i-r返回数据上下文,但需要将其命名为data
:
Router.route('/', function () {
this.render('Home', {
data: function () {
return { tasks: Tasks.find({}, {sort: {title: 1}, limit: 10}); } };
});
});
这会将数据上下文返回给您的模板,然后tasks
键将包含任务光标。