2015-06-08 9 views
0

Итак, на моей странице есть список разных книг, получаемых из коллекции Books.Meteor + Aldeed Autoform :: Как передать родительские данные?

Для каждой книги есть форма для добавления информации о заемщике.

Мои текущие структуры шаблона следующим образом:

<template name="bookList"> 
{{#each book}} 
    <div class="book"> 
    ... 
    </div> 
    {{> borrowerForm}} 
{{/each}} 
</template> 

<template name="borrowerForm"> 
    <div class="borrowerForm"> 
    {{#autoForm schema=borrowerFormSchema id="borrowerForm" type="method" meteormethod="addBorrower" class="hide"}} 
    </div> 
{{/each}} 
</template> 

Я использую type="method" для этого «заемщика» форме, так что я могу модифицировать doc (так называемый входной величины формы) с дополнительным объектом.

Вот как я это делаю в данный момент:

Meteor.methods({ 
    addBorrower: function(doc) { 
     if (! Meteor.userId()) { 
      throw new Meteor.Error("not-authorized"); 
     } 
     Meteor.users.deny({ 
      insert: function() { 
       return true; 
      } 
     }); 
     check(doc, Schemas.borrowerSchema); 

     var myData = doc; 

     //var bookID = Template.parentData(1)._id; 
     //console.log("bookID: " + bookID); 

     //myData["bookID"] = bookID; 
     myData["createdBy"] = Meteor.userId(); 
     myData["createdAt"] = new Date(); 

     Borrower.insert(myData); 
    } 
}); 

Все, кажется, работает нормально, пока я не нужно добавить еще одну вещь, которая является книга ID. Я хотел бы включить идентификатор книги, который заимствован как дополнительные данные, а также createdBy и createdAt.

Как я могу получить идентификатор книги, используя Template.parentData(1)._id, и он возвращает правильные данные (см. Прокомментированные строки на приведенном выше коде). Тем не менее, он бросает эту ошибку, ниже которой я не понимаю, и форма просто не будет подавать на все:

M…r.m…e.errorClass { 
     error: 500, 
     reason: "Internal server error", 
     details: undefined, 
     message: "Internal server error [500]", 
     errorType: "Meteor.Error" 
} 
details: undefined 
error: 500 
errorType: "Meteor.Error" 
message: "Internal server error [500]" 
reason: "Internal server error"stack: (...) 
▶︎ get stack:() { [native code] } 
▶︎ set stack:() { [native code] } 
▶︎ __proto__: Meteor.makeErrorType.errorClass 

Terminal:

Exception while invoking method 'addBorrower' ReferenceError: Template is not defined 
     at [object Object].Meteor.methods.addBorrower (app/common/books.js:42:31) 
     at maybeAuditArgumentChecks (packages/ddp/livedata_server.js:1617:1) 
     at packages/ddp/livedata_server.js:648:1 
     at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1) 
     at packages/ddp/livedata_server.js:647:1 
     at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1) 
     at [object Object]._.extend.protocol_handlers.method (packages/ddp/livedata_server.js:646:1) 
     at packages/ddp/livedata_server.js:546:1 

Может кто-то любезно объяснить, что там происходит и как для решения проблемы, пожалуйста? Благодаря!

Я новичок в Javascript и Meteor, поэтому простое, но ясное объяснение (с аналогами) было бы очень оценено.

+0

Эй, это ваш 'Meteor.methods' в файле в каталоге сервера или в каталоге клиента? Существует несколько способов получить идентификатор книги. – kaoskeya

+0

Я помещаю Meteor.methods внутри папки, доступной как для клиента, так и для сервера. – kyooriouskoala

ответ

0

Сначала переместите свой метод в файл в папке server/. Кроме того, переместите правило запрета вне метода.

Теперь в вашем borrowerForm.onRendered создать крюк AUTOFORM как:

AutoForm.hooks({ 
    borrowerForm: { 
     before: { 
      method: function(doc) { 
       doc.bookID = Template.parentData(1)._id; 
       return doc; 
      } 
     } 
    } 
}); 

Это должно работать, я не пробовал, хотя. Если этого не происходит, отправьте свой код на MeteorPad и разместите ссылку.

+0

Не может показаться, что он работает =/Пробовал MeteorPad, но это багги на моем конце. Пожалуйста, взгляните на это репо: https://bitbucket.org/kyooriouskoala/library/branch/master – kyooriouskoala

+0

Эй, я исправил это, пожалуйста, проверьте https://bitbucket.org/keya/library По какой-то причине , 'before' и' method' не работают, поэтому используется 'formToDoc'. – kaoskeya

+0

Также, пожалуйста, изучите что-то вроде https://github.com/iron-meteor/iron-cli, чтобы организовать свой код. Гораздо меньше времени потрачено на выяснение того, как организовать файлы, и это полностью добавляет вашей производительности. – kaoskeya

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