Steven Tib
Steven Tib

Reputation: 33

Meteor 1.3 autoform / quickform error

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 ?

Upvotes: 3

Views: 826

Answers (4)

Chris
Chris

Reputation: 644

My collection is called Services.

/imports/startup/client/index.js

import { Services } from '/imports/api/services/services.js';

window.Services = Services;

/client/main.js

import '/imports/startup/client';

Upvotes: 0

corvid
corvid

Reputation: 11187

try adding dburles:mongo-collection-helpers and doing the following.

import {Mongo} from "meteor/mongo";
import {Template} from "meteor/templating";

Template.registerHelper('collection', function (name) {
  return Mongo.Collection.get(name);
});

Then do this:

+autoform(
  id="some-form"
  collection=(collection 'items')
)

Upvotes: 0

Matthias A. Eckhart
Matthias A. Eckhart

Reputation: 5156

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>

Upvotes: 7

Gyandip Pandey
Gyandip Pandey

Reputation: 21

Try importing the file itself instead of { Items } only. I think the problem is, you are importing the collection only but its attachment isn't being imported. Try

import 'imports/collections/itemCollections.js';

And, you wouldn't need helpers function for insert type, its for update.

Upvotes: 0

Related Questions