I'm new to meteor and just arrived after the release 1.3. I've struggled to debug some very "stupid" things due to omitted imports or exports as most of the tutorials don't seem to include that. So the below issue might be of the same type.
I would like to use the package autoform so I've just added the package. (simple-schema and collection2 have also been included previously).
I'm getting error and the template doesn't load.
here is my template
<template name="addItem">
{{> quickForm collection="Items" id="addItemForm" type="insert" }}
</template>
I have my addItem.js
import { Meteor } from 'meteor/meteor';
import { Template } from 'meteor/templating';
import { Mongo } from 'meteor/mongo';
import { Items } from '/imports/collections/itemCollection.js';
import './addItem.html';
Template.addItem.onCreated(function bodyOnCreated(){
AutoForm.debug();
Meteor.subscribe('items');
});
Template.addItem.helpers({
Items() {
return Items.find({});
},
});
And my itemCollection.js file
import { Mongo } from 'meteor/mongo';
export const Items = new Mongo.Collection('items');
Items.allow({
insert: () => false,
update: () => false,
remove: () => false
});
Items.deny({
insert: () => true,
update: () => true,
remove: () => true
});
Items.schema = new SimpleSchema({
name : {type : String},
supplier : {type : String},
Viscosity : {type : Number},
createdAt : {type : Date()},
owner : {type: String},
});
Items.attachSchema(Items.schema);
Here is the error I get in the chrome console :
Exception in template helper: Error: Items is not in the window scope
at Object.lookup (http://localhost:3000/packages/aldeed_autoform.js?hash=5dbf44ff89f182bd8c2512330e170ef4d5bf9582:231:15)
at setDefaults (http://localhost:3000/packages/aldeed_autoform.js?hash=5dbf44ff89f182bd8c2512330e170ef4d5bf9582:3013:41)
at Object.AutoForm.parseData (http://localhost:3000/packages/aldeed_autoform.js?hash=5dbf44ff89f182bd8c2512330e170ef4d5bf9582:2771:10)
at Object.quickFormContext (http://localhost:3000/packages/aldeed_autoform.js?hash=5dbf44ff89f182bd8c2512330e170ef4d5bf9582:6696:33)
at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:2994:16
at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:1653:16
at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:3046:66
at Function.Template._withTemplateInstanceFunc (http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:3687:12)
at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:3045:27
at Object.Spacebars.call (http://localhost:3000/packages/spacebars.js?hash=65db8b6a8e3fca189b416de702967b1cb83d57d5:172:18)
debug.js:41 Exception in defer callback: TypeError: Cannot read property 'id' of null
at .<anonymous> (http://localhost:3000/packages/aldeed_autoform.js?hash=5dbf44ff89f182bd8c2512330e170ef4d5bf9582:6551:22)
at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:1875:20
at Function.Template._withTemplateInstanceFunc (http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:3687:12)
at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:1873:29
at Object.Blaze._withCurrentView (http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:2214:12)
at viewAutorun (http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:1872:18)
at Tracker.Computation._compute (http://localhost:3000/packages/tracker.js?hash=6f5d0f5486aaa54b0abe636174eeb06dcc2a736b:351:36)
at new Tracker.Computation (http://localhost:3000/packages/tracker.js?hash=6f5d0f5486aaa54b0abe636174eeb06dcc2a736b:239:10)
at Object.Tracker.autorun (http://localhost:3000/packages/tracker.js?hash=6f5d0f5486aaa54b0abe636174eeb06dcc2a736b:590:11)
at Blaze.View.autorun (http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:1885:22)
Someone could help and tell me what I might be doing wrong ?
You could solve this problem by implementing a Meteor template helper which returns the collection Items
and not a cursor, as you currently do now.
For example:
import {Items} from '/itemCollection.js';
Template.addItem.helpers({
items() {
return Items;
}
});
<template name="addItem">
{{> quickForm collection=items id="addItemForm" type="insert" }}
</template>