Итак, на моей странице есть список разных книг, получаемых из коллекции 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, поэтому простое, но ясное объяснение (с аналогами) было бы очень оценено.
Эй, это ваш 'Meteor.methods' в файле в каталоге сервера или в каталоге клиента? Существует несколько способов получить идентификатор книги. – kaoskeya
Я помещаю Meteor.methods внутри папки, доступной как для клиента, так и для сервера. – kyooriouskoala