在Meteor和Iron Router中设置数据上下文

时间:2016-02-05 11:08:22

标签: meteor iron-router

我正在听取一些建议,请使用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”模板设置的,所以不确定代码有什么问题。

任何建议都非常感谢。

2 个答案:

答案 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键将包含任务光标。