Настройка контекста данных в 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
Ключ будет содержать курсор задач.