Исключение в помощнике по шаблону: TypeError: Невозможно прочитать свойство 'mergedSchema' из неопределенного - PullRequest
0 голосов
/ 25 июня 2018

Я новичок в метеоре. Я использую простую схему для QuickForm и получил эту ошибку. Исключение в помощнике по шаблону: TypeError: Невозможно прочитать свойство 'mergedSchema' из неопределенного

main.html

<template name="hello">
  <button>Click Me</button>
  <p>You've pressed the button {{counter}} times.</p>
  {{> quickForm collection="Books" id="bookUpdateForm" type="insert"}}    

</template>

main.js

import './hello.html';    
import { Books } from '../../../api/links/books.js';

 Template.hello.onCreated(function () {
     Meteor.subscribe('books');
 });

Коллекция JS

import SimpleSchema from 'simpl-schema';
export const Books = new Mongo.Collection("books");
const Book = new SimpleSchema({
title: {
    type: String,
    label: "Title",
    max: 200
},
author: {
    type: String,
    label: "Author"
},
copies: {
    type: SimpleSchema.Integer,
    label: "Number of copies",
    min: 0
},
lastCheckedOut: {
    type: Date,
    label: "Last date this book was checked out",
    optional: true
},
summary: {
    type: String,
    label: "Brief summary",
    optional: true,
    max: 1000
}

});

Books.attachSchema (книга);

1 Ответ

0 голосов
/ 26 июня 2018

Существует опечатка, которая вызывает ошибку отслеживания.Ваша коллекция намен "books", но вы передаете "Books" своему quickForm.Поскольку AutoForm не может найти коллекцию с именем "Books" в глобальной области видимости, она выдаст ошибку.

Этот подход также предполагает, что Books находится в области видимости окна.

Если вы новичокзатем в JS вы можете сначала прочитать о областях видимости и области видимости:

https://developer.mozilla.org/en-US/docs/Glossary/Scope

https://developer.mozilla.org/en-US/docs/Web/API/Window

Почему глобальные переменные считаются плохой практикой?


Меньше подверженных ошибкам шаблонов

Альтернативным подходом было бы импортировать Books в ваш шаблон (как вы уже сделали) и предоставить егоquickForm через помощника по шаблонам :

main.html

<template name="hello">
  {{> quickForm collection=getCollection id="bookUpdateForm" type="insert"}}    
</template>

Примечание getCollection, которое в основном вызывает помощникаопределите в своем разделе помощников по шаблонам:

main.js

import './hello.html';    
import { Books } from '../../../api/links/books.js';

Template.hello.onCreated(function () {
    Meteor.subscribe('books');
});

Template.hello.helpers({
    getCollection() {
      return Books;
    }
});

Тем самым вы а) избежали (глобальную) область видимости окна и б) избежали ошибок из-зак орфографическим ошибкам, потому что вы передаете ссылку на коллекцию непосредственно в quickForm.

Коллекция JS

import SimpleSchema from 'simpl-schema';
export const Books = new Mongo.Collection("books");
const Book = new SimpleSchema({
    title: {
        type: String,
        label: "Title",
        max: 200
    },
    author: {
        type: String,
        label: "Author"
    },
    copies: {
        type: SimpleSchema.Integer,
        label: "Number of copies",
        min: 0
    },
    lastCheckedOut: {
        type: Date,
        label: "Last date this book was checked out",
        optional: true
    },
    summary: {
        type: String,
        label: "Brief summary",
        optional: true,
        max: 1000
    }
});

Books.attachSchema(Book);
...