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)
아마도 분명하지만 라우터 파일에서 Works 컬렉션을 가져오고 있습니까? – kooc
흠, 내가 보았던 튜토리얼 중 하나 (http://iron-meteor.github.io/iron-router/#route-options). 라우트 된 페이지로 데이터를 전달하는 방법을 알고 있습니까? – DarkTakua
'''Works = new Mongo.collection ('Works');'''이것을 정의 했습니까? 그렇지 않다면, 도우미 또는 Works 콜렉션에 mongo 호출을하는 모든 곳에서 정의 할 수 있습니까? – blueren