使用一个autoForm,我需要将数据插入两个集合中

问题描述 投票:0回答:1

我目前正在使用以部件集合和采购集合为应用程序主干的清单系统。每个零件都有相应的购买。即部件必须具有与之关联的部件编号,序列号和成本编号。我正在将Meteor.js与Coffeescrip,Jade和Graphr一起使用。我可以分别插入每个集合,但它们似乎没有连接。我已经建立了两个连接之间的链接器,但是我对下一步该怎么走有点迷惑

这是收藏的摘录

购买商品

    PurchaseInventory.schema = new SimpleSchema
        partId:
            type:String
            optional:true

        serialNum:
            type:Number
            optional:true

        costNum:
            type:Number
            optional:true

Parts Collection / schema


    Inventory.schema = new SimpleSchema

        name:
            type:String
            optional:true

        manufacturer:
            type:String
            optional:true

        description:
            type:String
            optional:true

零件查询


    export getInventory = Inventory.createQuery('getInventory',
        $filter: ({ filters, options, params }) ->
                if params.filters then Object.assign(filters, params.filters)
                if params.options then Object.assign(options, params.options)
                return { filters, options , params }
        name:1
        manufacturer:1
        description:1
        pic:1
        purchase:
            partId:1

    )

购买查询


    export getPurchase = PurchaseInventory.createQuery('getPurchase',
        $filter: ({ filters, options, params }) ->
                if params.filters then Object.assign(filters, params.filters)
                if params.options then Object.assign(options, params.options)
                return { filters, options , params }
        serial:1
        cost:1
        date:1
        warrentyDate:1
        userId:1
        )

链接器

//Parts
    Inventory.addLinks
        purchase:
            collection:PurchaseInventory
            inversedBy:"part"


    //purchases
    PurchaseInventory.addLinks
        part:
            type:'one'
            collection:Inventory
            field:'partId'
            index: true

最后是Jade / Pug自动表单


    +autoForm(class="inventoryForm" schema=schema  id="inventoryInsertForm" validation="blur" type="method" meteormethod="inventory.insert")
        .formGroup
          +afQuickField(name="name" label="Name")
          +afQuickField(name="manufacturer" label="Manufacturer")
          +afQuickField(name="description" label="Description")
          button#invenSub(type="submit") Submit

重申我的目标是使每个零件都有指向其相应购买数据的链接。

mongodb meteor coffeescript pug meteor-autoform
1个回答
0
投票

最直接的方法是使用autoform form type normal并为Submit事件创建一个自定义事件处理程序(或者,您可以使用AutoForm钩子normal)。从那里可以使用onSubmit获取当前文档。

由于我不喜欢Coffeescript,所以我将提供以下内容作为Blaze / JS代码,但我认为它应该可以为您提供想法:

AutoForm.getFormValues API function
AutoForm.getFormValues
{{# autoForm type="normal" class="class="inventoryForm" schema=schema  id="inventoryInsertForm" validation="blur"" schema=schema  id="insertForm" validation="blur" }}
  <!-- your fields -->
{{/autoForm}}

[注意,如果您需要两次插入都在服务器端成功完成,则应编写第三个Meteor方法,该方法在一个方法调用中显式地在两个集合中插入单个文档。如果您的Mongo版本> = 4,则可以将其与/** * validates a form against a given schema and returns the * related document including all form data. * See: https://github.com/aldeed/meteor-autoform#sticky-validation-errors **/ export const formIsValid = function formIsValid (formId, schema) { const { insertDoc } = AutoForm.getFormValues(formId) // create validation context const context = schema.newContext() context.validate(formDoc, options) // get possible validation errors // and attach them directly to the form const errors = context.validationErrors() if (errors && errors.length > 0) { errors.forEach(err => AutoForm.addStickyValidationError(formId, err.key, err.type, err.value)) return null } else { return insertDoc } } 结合使用。

© www.soinside.com 2019 - 2024. All rights reserved.