2016-12-16 2 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 콜렉션에 mongo 호출을하는 모든 곳에서 정의 할 수 있습니까? – blueren

답변

0

라우터 파일에 import { Works } from '/imports/api/works.js';가 추가되었습니다.