2015-09-18 1 views
0

Я пытающийся хранить информацию, поместить в эту форму с метеором:Метеор - Форма не вставлена ​​в коллекцию, когда представленный

<form class="form-group" id="lost_form"> 
     <label for="item_name">Type</label> 
     <input id="item_name" class="form-control" type="text" placeholder="What is the item? Ex: Water bottle" required/> 

     <label for="item_brand">Brand</label> 
     <input id="item_brand" class="form-control" type="text" placeholder="What brand is the item? Ex: Nalgene" required/> 

     <label for="item_desc">Description</label> 
     <input id="item_desc" class="form-control" type="text" placeholder="Describe the item. Ex: Green, name on bottom" required/> 

     <label for="item_loc">Location</label> 
     <input id="item_loc" class="form-control" type="text" placeholder="Where did you have it last? Ex: Main common room"/> 

     <label for="item_date">Date Missing</label> 
     <input id="item_date" class="form-control" type="date"/> 

     <br> 
     <input id="submit_lost_form" class="btn btn-primary btn-block" type="submit" value="Submit" /> 

    </form> 

JS я использую, чтобы положить его в коллекцию ниже:

LostItems = new Meteor.Collection('lostitems'); 

Meteor.methods({ 
    'insertItem': function(iname, ibrand, idesc, iloc, idate){ 

    LostItems.insert({ 
     user: Meteor.user(), 
     name: iname, 
     brand: ibrand, 
     description: idesc, 
     location: iloc, 
     date: idate 
    }) 
    } 
}); 

if (Meteor.isClient) { 
    Template.lost_form.events({ 
    'submit form': function (event) { 
     event.preventDefault(); 
     var itemName = event.target.item_name.value; 
     var itemBrand = event.target.item_brand.value; 
     var itemDesc = event.target.item_desc.value; 
     var itemLoc = event.target.item_loc.value; 
     var itemDate = event.target.item_date.value; 
     Meteor.call('insertItem', itemName, itemBrand, itemDesc, itemLoc, itemDate); 
    } 
    }); 
} 

Но всякий раз, когда я отправляю форму, ничего не происходит. В консоли разработчика или на консоли метеорита ошибок нет, и когда я делаю LostItems.find().fetch(), там ничего нет.

Я новичок в метеоритах, поэтому это, наверное, очень глупый вопрос, но я ценю любую помощь!

+0

это работает - и точно так же, как ваш код, исключая поле пользователя. http://meteorpad.com/pad/JkxBLRq8XLJTpxvnc/Leaderboard Если поле пользователя было проблемой, я не думаю, что это будет терпеть неудачу, хотя, поэтому я думаю, что ваша проблема может быть в другом месте. – JeremyK

+0

В вашем примере неясно, как назван ваш шаблон. У вашей формы есть идентификатор 'lost_form', и вы устанавливаете свои события на' Template.lost_form'. Вы назвали свой шаблон также 'lost_form'? Затем он должен работать, как сказал @JeremyK. В противном случае понятно, почему он не работает. – val

+0

@ Valentin мой шаблон также называется 'lost_form'. Должна ли форма иметь атрибут имени вместо ID? это будет иметь значение? – CastleCorp

ответ

-1

Я исправил проблему, добавив 0: insecure, yogiben:autoform-tags и autopublish в мой список пакетов. Я думаю, что autopublish - это тот, который сделал разницу. Я уверен, что есть лучший способ сделать это, и что это, вероятно, имеет некоторые недостатки безопасности, но это не большой проект, и он не хранит конфиденциальные данные, так что это будет работать пока.

+0

Посмотрите на ответ Дин Бреттл ниже. Он позволяет удалить пакет автоматического опубликования и объясняет, почему вы видите, что lost_count кратко показывает 1 перед возвратом в 0. Это называется сжатием латентности. https://www.discovermeteor.com/blog/latency-compensation/ – JeremyK

1

Возможно, вам потребуется использовать Meteor.userId() вместо Meteor.user() по вашему звонку insert(). Без пакета autopublish документ, возвращаемый Meteor.user(), может отличаться от клиента, чем на сервере (по соображениям безопасности). Это означает, что вставка на стороне клиента в ваш мини-монгодб и вставка на стороне сервера в настоящий монгодб может конфликтовать друг с другом. Я ожидаю, что вставка клиентской стороны будет проигнорирована после того, как результат вставки на стороне сервера будет передаваться обратно клиенту. Я не уверен, почему он не заменяется на стороне сервера. Что возвращает LostItems.find().fetch() при запуске на сервере (например, в meteor shell)?

Смежные вопросы