Как исправить исключение в помощнике по шаблону: ReferenceError: ошибка Todos не определена в meteor.js

Я начал полный курс разработки стека в Udemy, и там есть секция метеора. Когда я компилирую код, он выдает следующую ошибку: «Исключение в помощнике по шаблону: ReferenceError: Todos не определен».

Я пробовал искать здесь, в stackoverflow, разрешения, но ни одно из них, похоже, не работает.

Я попытался назвать шаблон «телом», это было одним из предложений.

Вот что я получил.

клиент/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);
  }
});

клиент/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>

библиотека/коллекции.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

person py_9    schedule 06.08.2019    source источник


Ответы (2)


Вам нужно экспортировать Todos из 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";

также импортируйте Todos в файл client/main.js

import Todos from "../lib/collections";

Todos будут видны после выполнения вышеуказанного. Ваше здоровье

person James Oshomah    schedule 06.08.2019
comment
Я только что попробовал, и все еще получаю Uncaught ReferenceError: Todos не определен, если в консоли Inspect Element я ищу Todos.find().fetch() - person py_9; 08.08.2019
comment
Можете ли вы поделиться ссылкой на GitHub, чтобы я мог помочь вам отладить ее с этой стороны. - person James Oshomah; 08.08.2019
comment
Чтобы сделать Todos доступным из консоли, вам нужно сделать первый вариант, который я вам дал. По сути, просто поместите const перед коллекцией Todos в lib/collections. Добавление const делает его закрытым для этого файла, поэтому он будет недоступен из консоли. - person Sean Hayes; 08.08.2019
comment
@JamesOshomah вот ссылка github.com/ines96/FullStackCourse, это папка с быстрыми задачами - person py_9; 09.08.2019
comment
@SeanHayes Я пробовал, но все равно выдает эту ошибку Исключение в помощнике по шаблону: ReferenceError: Todos не определено - person py_9; 09.08.2019
comment
@py_9 я просмотрел ваш код и обновил свой ответ. - person James Oshomah; 09.08.2019
comment
Спасибо @JamesOshomah Это действительно работает! Еще один вопрос: в консоли разработчика браузера, если я пытаюсь выполнить поиск Todos.find().fetch(), он выдает ошибку Uncaught ReferenceError: Todos notdefined. - person py_9; 24.08.2019

Привет, у вас есть два простых решения.

1. изменить

const Todos = new Mongo.Collection('todos'); 

to

Todos = new Mongo.Collection('todos');

В lib/collections.js Это сделает коллекцию Todos глобальной и доступной из вашего шаблона.

2. Если вам не нужны глобальные переменные, сделайте следующее. сдача

const Todos = new Mongo.Collection('todos');

to

export const Todos = new Mongo.Collection('todos');

В lib/коллекции.js

Добавить в начало файла client/main.js

import {Todos} from '/lib/collections';
person Sean Hayes    schedule 06.08.2019
comment
Я только что попробовал оба решения, и я все еще получаю Uncaught ReferenceError: Todos is not defined, если в консоли Inspect Element я ищу Todos.find().fetch() - person py_9; 06.08.2019
comment
если вы используете этот подход, он должен быть доступен в консоли.Todos = new Mongo.Collection('todos'); - person Sean Hayes; 08.08.2019