我目前正在使用以部件集合和采购集合为应用程序主干的清单系统。每个零件都有相应的购买。即部件必须具有与之关联的部件编号,序列号和成本编号。我正在将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
重申我的目标是使每个零件都有指向其相应购买数据的链接。
最直接的方法是使用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
}
}
结合使用。