2016-02-05 1 views
0

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

Чтобы объяснить, что я работаю на достаточно базового проекта обзоров фильмов, и развернуты Modulus на 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» шаблона, так что не уверен что не так с кодом.

Любой совет, который очень ценится.

+0

В http://reviews-48062.onmodulus.net/ он работает. Это что-то отличное от вашего кода? –

ответ

0

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

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

Большое спасибо Стивен. Теперь я установил помощник, и он работает правильно. – user3801462

0

Вы можете вернуть контекст данных с ИК, но он должен быть назван data:

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

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

+0

Спасибо, Мишель. Это работает. – user3801462