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」が使用されます。2 つの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}}

afFormGroupwith を追加すると、type="hidden"まさにそのトリックが実行されました。

doc議論がその約束を果たしていないように私にはまだ思えますが.

于 2015-04-03T03:43:04.137 に答える