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">&times;</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';