How to fix "Exception in template helper: ReferenceError: Todos is not defined" error in meteor.js
How to fix "Exception in template helper: ReferenceError: Todos is not defined" error in meteor.js
我已经在 Udemy 开始了全栈开发课程,并且有一个流星部分。当我编译代码时,出现以下错误:"Exception in template helper: ReferenceError: Todos is not defined".
我尝试在 Whosebug 中搜索解决方案,但 none 似乎有效。
我试过用 "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
您需要从 collection.js 中导出待办事项并将其导入到 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";
完成上述操作后,待办事项将可见。干杯
您好,您有两个简单的解决方案。
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';
我已经在 Udemy 开始了全栈开发课程,并且有一个流星部分。当我编译代码时,出现以下错误:"Exception in template helper: ReferenceError: Todos is not defined".
我尝试在 Whosebug 中搜索解决方案,但 none 似乎有效。
我试过用 "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
您需要从 collection.js 中导出待办事项并将其导入到 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";
完成上述操作后,待办事项将可见。干杯
您好,您有两个简单的解决方案。
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';