繁体   English   中英

流星+ Aldeed Autoform ::如何传递父数据?

[英]Meteor + Aldeed Autoform :: How to pass parent data?

因此,在我的页面上,有一系列从Books集合中呈现的不同书籍的列表。

对于每本书,都有一个表格来添加有关借书人的一些信息。

我当前的模板结构如下:

<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为止。 我想将要借用的书ID作为附加数据与createdBycreatedAt一起。

我获取书ID的方法是使用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

终奌站:

  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上并发布一个链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM