如何修复 Meteor.js 中的“模板助手中的异常:ReferenceError:未定义 Todos”错误
2019-08-06
1021
我已经在 Udemy 上开始学习全栈开发课程,其中有一个 Metrace 部分。当我编译代码时,它给出了以下错误:“模板助手中的异常:ReferenceError:未定义 Todos”。
我尝试在 stackoverflow 中搜索解决方案,但似乎都没有用。
我试图用“body”命名模板,这是建议之一。
这是我得到的。
client/main.js
import { Template } from 'meteor/templating';
import { Todos } from '/lib/collections';
import './main.html';
Template.main.helpers({
title(){
return 'QuickTodos';
},
todos(){
const todos = Todos.find();
return todos;
}
});
Template.main.events({
'submit .add-todo'(event){
event.preventDefault();
const text = event.target.text.value;
const time = event.target.time.value;
Todos.insert({
text,
time
});
event.target.text.value = '';
event.target.time.value = '';
}
});
Template.todo.events({
'click .toggle-checked'(event){
Todos.update(this._id, {
$set:{checked: !this.checked}
});
},
'click .delete'(event){
Todos.remove(this._id);
}
});
client/main.html
<head>
<title>QuickTodos</title>
</head>
<body>
{{> main}}
</body>
<template name="main">
<header>
<h1>{{title}}</h1>
<form class="add-todo">
<input type="text" name="text" placeholder="Add Todo...">
<input type="text" name="time" placeholder="Add Time...">
<button type="submit">Add</button>
</form>
</header>
<ul>
{{#each todos}}
{{> todo}}
{{/each}}
</ul>
</template>
<template name="todo">
<li class="{{#if checked}}checked{{/if}}">
<button class="delete">×</button>
<input type="checkbox" checked={{checked}} class="toggle-checked">
<strong>{{time}}:</strong> {{text}}
</li>
</template>
lib/collections.js
import { Mongo } from 'meteor/mongo';
export const Todos = new Mongo.Collection('todos');
现在编译时没有错误,但是当我在浏览器控制台中搜索
Todos.find().fetch()
时,它给出了此错误:
Uncaught ReferenceError: Todos is not defined
at <anonymous>:1:1
2个回答
您需要从 collection.js 中导出 Todos 并将其导入到 client/main.js 文件中 //在您的 lib/collection 文件中执行此操作
import { Mongo } from "meteor/mongo";
const Todos = new Mongo.Collection("todos");
export default Todos;
在您的 main/server.js 文件中,您需要导入 Todos
import Todos from "../lib/collections";
同时在您的 client/main.js 文件中导入 Todos
import Todos from "../lib/collections";
完成上述操作后,Todos 将可见。谢谢
James Oshomah
2019-08-06
嗨,您有两个简单的解决方案。
1. 将
const Todos = new Mongo.Collection('todos');
更改为
Todos = new Mongo.Collection('todos');
在 lib/collections.js 中 这将使 Todos 集合成为全局集合,因此可以从您的模板中访问。
2. 如果您不想要全局范围的变量,请执行以下操作。 将
const Todos = new Mongo.Collection('todos');
更改为
export const Todos = new Mongo.Collection('todos');
在 lib/collections.js 中
添加到文件 client/main.js 的顶部
import {Todos} from '/lib/collections';
Sean Hayes
2019-08-06