1

我有这个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钩子吗?我是否必须使用模板提供的值隐藏表单输入?这里有什么解决方法?

4

1 回答 1

2

原来是隐藏输入。

我将表格扩展为:

{{#autoForm id="insertFixie" collection="Fixies" type="insert"}}
    <fieldset>
        {{> afFormGroup name="description" placeholder="schemaLabel" label=false}}
        <div class="form-group{{#if afFieldIsInvalid name='cost'}} has-error{{/if}}">
            <div class="input-group">
                <div class="input-group-addon">$</div>
                {{> afFieldInput name="cost" placeholder="schemaLabel" label=false}}
            </div>
            {{#if afFieldIsInvalid name="cost"}}
                <span class="help-block">{{afFieldMessage name="cost"}}</span>
            {{/if}}
        </div>
        {{> afFormGroup name="product_id" type="hidden" value=_id}}
    </fieldset>
    <button class="btn btn-primary" type="submit">Insert</button>
{{/autoForm}}

添加一个afFormGroupwithtype="hidden"就可以了。

尽管在我看来,这个doc论点仍然没有兑现它的承诺。

于 2015-04-03T03:43:04.137 回答