var settingsForm; function form() { settingsForm = new ModelForm(Settings, settingsFormOptions()); return settingsForm; } Template.settings.helpers({ generateSettingsForm: function (setting) { Meteor.defer(function() { form().generateFor(setting); }) }, noSettings: function(){ if (Settings.findOne()) { return false; } return true; }, setting: function(){ var setting = Settings.find().fetch()[0]; return new Setting(setting) || new Setting(); } }); Template.settings.events = { 'click input[type=submit]': function(e){ e.preventDefault(); if(!Meteor.user()) throw 'You must be logged in.'; settingsForm.submit( function(){ throwError("Settings have been created"); }, function(error) { if(error) console.log(error); throwError("Settings have been updated"); }); } }; function settingsFormOptions() { return { 'requireViewInvite': { title: 'Require Invite to view?' }, 'requirePostInvite': { title: 'Require Invite to post?' }, 'requirePostsApproval': { title: 'Posts must be approved by admin?' }, 'title': { title: 'Site Title' }, 'theme': { 'enum': [ 'Default', 'Ascndr', 'Telescope' ] }, 'footerCode': { type: 'textarea' }, 'analyticsCode': { type: 'textarea' }, 'mixpanelId': { title: 'Mixpanel ID' }, 'proxinoKey': { title: 'Proxino key' }, 'goSquaredId': { title: 'GoSquared ID' }, 'intercomId': { title: 'Intercom ID' }, 'veroAPIKey': { title: 'Vero API key' }, 'veroSecret': { title: 'Vero secret' }, 'logoUrl': { title: 'Logo URL' }, 'landingPageText': { type: 'textarea' }, 'afterSignupText': { type: 'textarea' }, 'notes': { type: 'textarea' } }; }