2016-12-16 10 views
0

Используя IronRouter, я успешно отобразил шаблон страницы. Я пытаюсь передать данные из коллекции на уникальную страницу, но есть ошибка, указывающая, что коллекция не определена. Подписки не являются проблемой, поскольку установлена ​​автоматическая публикация.Meteor Ironrouter пытается передать данные, но говорит, что коллекция не определена

Я получаю данные из формы, сохраняю ее, а затем я хочу отобразить эти данные на маршрутизированной странице.

До сих пор, для коллекции, у меня есть:

import { Meteor } from 'meteor/meteor'; 
import { Template } from 'meteor/templating'; 
import { Works } from '../api/works.js'; 

import './work.js'; 
import './body.html'; 

Template.main.helpers({ 
    works() { 
    return Works.find({}, { sort: { createdAt: -1 } }); 
    }, 
}); 

Template.main.events({ 
    'submit .new-work'(event) { 
    event.preventDefault(); 

    const title = event.target.title.value; 
    const workBriefDesc = event.target.workBriefDesc.value; 
    const workFullDesc = event.target.workFullDesc.value; 
    const workId = this._id; 

    Works.insert({ 
     title, 
     workBriefDesc, 
     workFullDesc, 
     createdAt: new Date(), 
     owner: Meteor.userId(), 
     username: Meteor.user().username, 
     workId, 
    }); 

    event.target.title.value = ''; 
    event.target.workbriefdesc.value = ''; 
    event.target.workfulldesc.value = ''; 

    }, 
}); 

Template.collab.helpers({ 
    works: function(){ 
    return Works.findOne({_id:Router.current().params.workId}); 
    }, 
}); 

И для файла IronRouter:

Router.route('/works/:_id', function() { 
    this.render('Collab'); 
}, { 
    name: 'collab', 
    data: function(){ 
     return Works.findOne({ _id: this.params._id}); 
    }, 
}); 

, и файл шаблона:

<!-- Publishing the template work --> 
<template name="main"> 
         <form class="new-work col s12"> 
          <div class="row"> 
           <div class="input-field col s6"> 
            <input id="title" type="text" class="validate"> 
            <label for="title">Name of work</label> 
           </div> 
           <div class="input-field col s6"> 
            <select> 
             <option value="" selected>Choose category</option> 
             <option value="1">Prose</option> 
            </select> 
            <label></label> 
           </div> 
          </div> 
          <div class="row"> 
           <div class="input-field col s12"> 
            <input id="workBriefDesc" type="text" length="250"> 
            <label for="workBriefDesc">Brief description</label> 
           </div> 
          </div> 
          <div class="row"> 
           <div class="input-field col s12"> 
            <textarea id="workFullDesc" class="materialize-textarea" length="10000"></textarea> 
            <label for="workFullDesc">Full description</label> 
           </div> 
          </div> 
          <div class="row"> 
           <div class="input-field col s12"> 
            <textarea id="workessay" class="materialize-textarea"></textarea> 
            <label for="workessay">Essay</label> 
           </div> 
          </div> 
          <div class="modal-footer"> 
           <button href="#!" class="modal-action modal-close waves-effect waves-grey btn-flat center" type="submit" name="action">Submit</button> 
          </div> 
         </form> 
    {{#each works}} {{ > work}} {{/each}} 
</template> 

<!-- Link to the unique page --> 
<template name="work"> 
    Go to <a href="/work/{{_id}}">work</a> 
</template> 


<!-- Unique page attached to ID --> 
<template name="collab"> 
    {{title}} <br> 
    {{workBriefDesc}} <br> 
    {{workFullDesc}} 
</template> 

Это ошибка с консоли браузера:

Exception from Tracker recompute function: 
meteor.js?hash=e3f53db…:930 
ReferenceError: Works is not defined 
    at ctor.data (routes.js:17) 
    at Layout._data (iron_controller.js?hash=eb63ea9…:222) 
    at Layout.DynamicTemplate.data (iron_dynamic-template.js?hash=7644dc7…:215) 
    at iron_dynamic-template.js?hash=7644dc7…:248 
    at Blaze.View.<anonymous> (blaze.js?hash=983d07a…:2616) 
    at blaze.js?hash=983d07a…:1875 
    at Function.Template._withTemplateInstanceFunc (blaze.js?hash=983d07a…:3687) 
    at blaze.js?hash=983d07a…:1873 
    at Object.Blaze._withCurrentView (blaze.js?hash=983d07a…:2214) 
    at viewAutorun (blaze.js?hash=983d07a…:1872) 
+2

Возможно, очевидно, но вы импортируете коллекцию Works в файл маршрутизатора? – kooc

+0

Хмм, один из уроков, на которые я смотрел, предложил сделать это (http://iron-meteor.github.io/iron-router/#route-options). Вы знаете, как я буду передавать данные на маршрутизированную страницу? – DarkTakua

+0

'' 'Works = new Mongo.collection ('Works');' '' Вы определили это? Если нет, можете ли вы определить его в своем помощнике или где бы вы не совершали монго-звонки в коллекцию Works? – blueren

ответ

0

Добавлено import { Works } from '/imports/api/works.js'; в мой файл Маршрутизатора.