Итак, я создал приложение, которое в основном позволяет моим товарищам по команде заполнять и отправлять формы. В оригинальном тестировании Meteor будет случайным образом обновлять страницу (даже если никакие зависимые источники данных не были обновлены), и они потеряют информацию, уже введенную в форму. Поэтому я взломал двухстороннее решение привязки данных, создав приложение для создания временного документа в отдельной коллекции Mongo, которая будет хранить данные формы до тех пор, пока пользователь не завершит и не отправит форму - в этот момент приложение удаляет временный документ. Я также использовал железный маршрутизатор для динамического создания уникальной страницы с использованием идентификатора нового документа.Расписание Монго сбора коллекции в приложении Meteor
Моя проблема заключается в том, что если пользователь не отправляет или не отменяет форму, документ не удаляется, и я оставляю кучу ненужных данных. Я хочу запланировать еженедельную очистку этой коллекции Meteor, но я не знаю, как это сделать. Я не уверен, что код актуально здесь, но я включил событие, которое создает и удаляет временный документ:
Screens = new Meteor.Collection('screens') // where forms will ultimately be stored
Forms = new Meteor.Collection('forms') // form templates
NewScreen = new Meteor.Collection('newscreen') //used for temporary data storage
//event that generates temporary object when users start new form
'click [name=new-screen]': function(e, tmpl) {
NewScreen.insert({
first: '',
role: this.position_name,
answers: [],
form_id: this._id,
position_name: this.position_name,
form_bundle: this.form_bundle,
created_at: new Date
});
//event that stores form data in the final collection, and removes the temporary storage document
'click [name=submit]': function(e, tmpl) {
e.preventDefault();
var newObj = {};
var q_elements = $('.question-form li');
var a_elements = $('textarea');
var ca_elements = $('.correct-answer');
var qa_bundle = []
for(i=0; i<q_elements.length; i++){
myObj={}
myObj['question'] = q_elements[i].innerHTML;
myObj['answer'] = a_elements[i+1].value;
myObj['correct_answer'] = ca_elements[i].innerHTML.split('</b> ')[1];
qa_bundle.push(myObj);
}
newObj['name'] = $('input')[0].value;
newObj['prescreen_notes'] = $('#prescreen-notes')[0].value;
newObj['role'] = this.position_name;
newObj['qa_bundle'] = qa_bundle;
newObj['created_at'] = new Date;
Screens.insert(newObj);
for(i=0;i<$('input').length; i++){
$('input')[i].value = '';
}
for(i=0;i<$('textarea').length; i++){
$('textarea')[i].value = '';
}
$('#new-id')[0].innerHTML = 'Link to candidate prescreen: <a href="/screens/' + Screens.find().fetch()[Screens.find().fetch().length-1]._id +'">' + Screens.find().fetch()[Screens.find().fetch().length-1]._id + '</a>';
NewScreen.remove({_id: window.location.pathname.split('/')[window.location.pathname.split('/').length-1]})
},
Если это поможет, я совершил версию приложения, что «метеорит build ", чтобы сделать его node.js app, для github repo здесь: https://github.com/gharezlak/prescreens
Благодарим за ответ! Я собираюсь попробовать это и пару других предлагаемых решений, и посмотреть, какой из них лучше всего работает. –