Autoform insert:doc值没有任何影响

时间:2015-04-02 16:29:48

标签: javascript meteor meteor-autoform

我有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"}

但是当我提交有效的表格时(例如"东西"和#34; 100"),我收到此错误:

insert error:
Error: Product is required {invalidKeys: Array[1],
validationContext: SimpleSchemaValidationContext,
stack: (...),
message: "Product is required"}

声明product_id属性是必需的,且当前的值为null

我做错了什么?那个product_id是依赖于模板的值,所以类似于" autoValue"在架构中似乎不是处理它的最佳方式。

文档似乎清楚地表明我正确地使用了东西。来自doc的{​​{1}}属性的说明:

  

对于插入表单,您还可以使用此属性来传递对象   设置了默认表单值(与设置值的效果相同   表格中每个字段的属性。)

来自Auto Form的{​​{1}}属性的说明:

  

值:为输入设置特定的潜在反应值。如果   你还在autoForm或quickForm上提供了doc属性,   该值将覆盖doc对象的值。

我错过了什么?

修改

我在我的架构中添加了value字段,只是为了查看弹出的内容:

afFieldInput

这允许表单正确提交,但使用不正确的硬编码值" 1"而不是模板中的有用值。这两个autoValue日志显示了这一点:

autoValue: function (doc) {
    console.log(doc)
    console.log(this.value)
    return "1";
}

似乎我的console值不可用于autoValue。

我是否必须劫持:24 Object {description: "stuff", cost: 50} :25 undefined 个钩子?我是否必须使用模板提供的值隐藏表单输入?这里的解决方法是什么?

1 个答案:

答案 0 :(得分: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}}

使用afFormGroup添加type="hidden"就可以了。

虽然在我看来doc这个论点似乎还没有达到它的承诺。