0

私には2つのフォームと2つのスキーマがあり、共通するものはありません。しかし、私はまだそれらを同じコレクションに保存する必要があります。autoformとcollection2を使用して同じコレクションに複数のスキーマをアタッチする

例:.:

schema1 = new SimpleSchema({ field1, field2, field3 }); 
collection.attachSchema(schema1); 

schema2 = new SimpleSchema({ fieldX, fieldY, fieldZ }); 
collection.attachSchema(schema2); 

Collection2 documentationから、上記の方法は、実際には単一の大きなスキーマにスキーマの両方をマージすることが理解されます。これは、両方のフォームが両方のスキーマに属するすべてのフィールドを持つ必要があることを意味します。

これは、私はauto1にschema1だけを持たせることはできず、もう一つのautoformにschema2だけを持たせることができないことを意味します。

ドキュメントごとに、私はreplace:trueを実装しようとしました。これにより、毎回スキーマが上書きされます。 (少なくとも、これは私がそれを理解する方法である - 彼らは大きなスキーマにマージされません)

例:

schema1 = new SimpleSchema({ field1, field2, field3 }); 
collection.attachSchema(schema1, {replace: true}); 

schema2 = new SimpleSchema({ fieldX, fieldY, fieldZ }); 
collection.attachSchema(schema2 {replace: true}); 

上記それでも問題が解決しないと、どういうわけか、スキーマがまだマージされます。つまり、fieldXが満たされるような規定がなくても、FieldXがautoform1で空白であることが通知されます。

また、バリエーションを使用する他のアプローチも試しました。

私は上記を実装する場合例:。:

schema1 = new SimpleSchema({ field1, field2, field3 }); 
collection.attachSchema(schema1, {selector: {type: 'forForm1'}}); 

schema2 = new SimpleSchema({ fieldX, fieldY, fieldZ }); 
collection.attachSchema(schema2, {selector: {type: 'forForm2'}}); 

は、私は複数のスキーマを扱うときにドキュメントへの引数が渡されなければならないことを言ってオートフォームのエラーを取得します。

これはどのように正確に行いますか?

ドキュメントを明記した:

を今すぐ両方のスキーマが取り付けられています。ドキュメントに「 'simple」という種類のドキュメントを挿入すると、 SimpleProductSchemaに対してのみ検証されます。文書に「variant」というタイプの文書を挿入すると、 VariantProductSchemaに対してのみ検証されます。

私はdoc = ????をどのように渡す必要があるか分からないテンプレート内の誰かが私を導くことができますか?

これは私のオートフォームテンプレートです:

をForm1:

{{#autoForm collection = "pgTemplates" type ="insert" doc= ???? id ="InsertForm1" }} 
{{#each afFieldNames}} 
{{> afQuickField name=this.name options = afOptionsFromSchema }} 
{{/each}} 

のForm2:

{{#autoForm collection = "pgTemplates" type ="insert" doc= ???? id ="InsertForm1" }} 
{{#each afFieldNames}} 
{{> afQuickField name=this.name options = afOptionsFromSchema }} 
{{/each}} 

答えて

0

オートフォーム用documentationによると:

doc:更新フォームに必要です。少なくとも_id のプロパティが必要です。たとえば、 findOne()の呼び出しで取得された現在のドキュメントオブジェクトを渡します。挿入フォームの場合、この 属性を使用して、デフォルトのフォーム値が設定されたオブジェクト(フォーム内の各フィールドに値属性を設定するのと同じ の効果)を渡すこともできます。

schema

は、この場合にも有用であり得る別のパラメータschemaあり、コレクションが設定されていない場合は必須。このスキーマは に送信する前にフォームを生成して検証するために使用されるため、 というスキーマを使用する場合はコレクションと一緒に と指定することができます。ただし、最終オブジェクトの は、コレクション スキーマに対して検証を渡す必要があります。次のいずれかに設定します。

  • SimpleSchemaのインスタンスを返すヘルパー関数の名前(引用符はありません)。
  • ウィンドウ名前空間内にあるSimpleSchemaインスタンスの名前(引用符で囲んだもの)。

ですから、それぞれの場合において、特定のschemaに応じてスキーマパラメータを設定してみてください、ともdocで現在のドキュメントオブジェクトを渡すことを試みることができます。

私はテンプレートは次のようになりますと仮定します。

をForm1:

{{#autoForm collection = "pgTemplates" schema="schema1" type ="insert" doc=docObject id ="InsertForm1" }} 
    {{#each afFieldNames}} 
    {{> afQuickField name=this.name options = afOptionsFromSchema1 }} 
    {{/each}} 

のForm2:上記の場合

{{#autoForm collection = "pgTemplates" schema="schema2" type ="insert" doc=docObject id ="InsertForm1" }} 
    {{#each afFieldNames}} 
    {{> afQuickField name=this.name options = afOptionsFromSchema2 }} 
    {{/each}} 

、あなたはそれを確認する必要がありますschemaのインスタンスは、ウィンドウの名前空間で正しく使用できます

それともように、特定のインスタンスを返すヘルパー関数を持つことができます。

{{#autoForm collection = "pgTemplates" schema=getSchema1 type ="insert" doc=docObject id ="InsertForm1" }} 
    {{#each afFieldNames}} 
     {{> afQuickField name=this.name options = afOptionsFromSchema2 }} 
    {{/each}} 
:ヘルパーで

関連する問題