Meteor + Aldeed Autoform :: 如何传递 parent 数据?
Meteor + Aldeed Autoform :: How to pass parent data?
所以在我的页面上,有一个从 Books
collection 渲染的不同书籍的列表。
对于每本书,都有一个表格可以添加一些关于借阅者的信息。
我目前的模板结构如下:
<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>
我正在为这个 "borrower" 表单使用 type="method"
,这样我就可以用额外的 object.[=21 修改 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
.
旁边添加作为附加数据借用的图书 ID
我获取图书 ID 的方法是使用 Template.parentData(1)._id
并且它会 return 正确的数据(参见上面代码中的注释行)。但是,它抛出了这个我不明白的错误,表单根本不会提交:
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
航站楼:
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 的新手,因此也将不胜感激简单明了的解释(带有类比)。
首先将您的方法移动到 server/
文件夹中的文件中。另外,将您的拒绝规则移到方法之外。
现在,在您的 borrowerForm.onRendered
中创建一个 AutoForm 挂钩,例如:
AutoForm.hooks({
borrowerForm: {
before: {
method: function( doc ) {
doc.bookID = Template.parentData(1)._id;
return doc;
}
}
}
});
这应该可行,但我还没有尝试过。如果还是不行,请把你的代码放到 MeteorPad 上 post a link.
所以在我的页面上,有一个从 Books
collection 渲染的不同书籍的列表。
对于每本书,都有一个表格可以添加一些关于借阅者的信息。
我目前的模板结构如下:
<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>
我正在为这个 "borrower" 表单使用 type="method"
,这样我就可以用额外的 object.[=21 修改 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
.
我获取图书 ID 的方法是使用 Template.parentData(1)._id
并且它会 return 正确的数据(参见上面代码中的注释行)。但是,它抛出了这个我不明白的错误,表单根本不会提交:
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
航站楼:
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 的新手,因此也将不胜感激简单明了的解释(带有类比)。
首先将您的方法移动到 server/
文件夹中的文件中。另外,将您的拒绝规则移到方法之外。
现在,在您的 borrowerForm.onRendered
中创建一个 AutoForm 挂钩,例如:
AutoForm.hooks({
borrowerForm: {
before: {
method: function( doc ) {
doc.bookID = Template.parentData(1)._id;
return doc;
}
}
}
});
这应该可行,但我还没有尝试过。如果还是不行,请把你的代码放到 MeteorPad 上 post a link.