我有这个quickForm
:
{{> quickForm id="insertFixie" collection="Fixies" type="insert" doc=seedObject}}
由此架构支持:
Fixies = new Meteor.Collection('fixies');
Schema.Fixies = new SimpleSchema({
description: {
type: String,
label: "Description",
trim: true,
optional: true
},
cost: {
type: Number,
label: "Cost",
min: 0,
decimal: true
},
product_id: {
type: String,
autoform: {
omit: true
}
},
});
Fixies.attachSchema(Schema.Fixies);
这个seedObject
方法:
Template.insertFixie.helpers({
seedObject: function () {
console.log({product_id: this._id});
return {product_id: this._id};
}
});
当console
上面的调用发生时,它是正确的,并给出了这样的效果:
Object {product_id: "1"}
但是当我用有效的东西(比如“stuff”和“100”)提交表单时,我收到了这个错误:
insert error:
Error: Product is required {invalidKeys: Array[1],
validationContext: SimpleSchemaValidationContext,
stack: (...),
message: "Product is required"}
声明该product_id
属性是必需的并且当前的值为null
。
我究竟做错了什么?这product_id
是一个依赖于模板的值,因此模式中的“autoValue”之类的东西似乎不是处理它的最佳方式。
文档似乎清楚地表明我正在正确使用事物。从 的doc
属性描述来看Auto Form
:
对于插入表单,您还可以使用此属性来传递设置了默认表单值的对象(与在表单中的每个字段上设置值属性的效果相同)。
并从 的value
属性描述afFieldInput
:
value:为输入设置一个特定的、潜在的反应值。如果您还在 autoForm 或 quickForm 上提供了 doc 属性,则此值将覆盖 doc 对象中的值。
我错过了什么?
编辑
我在架构中添加了一个autoValue
字段,只是为了查看弹出的内容:
autoValue: function (doc) {
console.log(doc)
console.log(this.value)
return "1";
}
这允许表单正确提交,但使用不正确的硬编码值“1”而不是模板中的有用值。这两个console
日志显示了这一点:
:24 Object {description: "stuff", cost: 50}
:25 undefined
看来我的seedObject
价值不适用于 autoValue。
我必须劫持onSubmit
钩子吗?我是否必须使用模板提供的值隐藏表单输入?这里有什么解决方法?