Настройка контекста данных в Meteor и Iron Router

Я получил несколько советов, как лучше настроить контексты данных для базы данных MongoDB с помощью Iron Router.

Чтобы объяснить, я работаю над довольно простым проектом рецензий на фильмы и размещен в модуле на http://reviews-48062.onmodulus.net/

Возвращает список отзывов, но хотел бы использовать маршруты для создания других страниц. Я установил 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 ответа

tasks не является допустимым свойством для отправки этому объекту. Вам необходимо установить контекст данных для IronRouter, используя data вместо. + Изменить tasks в data, а затем настройте помощник в своем шаблоне для получения данных о задачах:

Template.Home.helpers({
    tasks() {
        return Tasks.find({}, {sort: {title: 1}, limit: 10});
    }
});

Вы можете вернуть контекст данных с помощью ir, но он должен быть назван data:

Router.route('/', function () {
  this.render('Home', {
  data: function () {
    return { tasks: Tasks.find({}, {sort: {title: 1}, limit: 10}); } };
  });
});

Это вернет контекст данных в ваш шаблон, а затем tasks Ключ будет содержать курсор задач.

Другие вопросы по тегам