我有两种形式,两种模式没有任何共同之处。但我仍然需要将它们存储在同一个集合中。
例如:
schema1 = new SimpleSchema({ field1, field2, field3 });
collection.attachSchema(schema1);
schema2 = new SimpleSchema({ fieldX, fieldY, fieldZ });
collection.attachSchema(schema2);
从Collection2 documentation可以理解,上述方法实际上将两个模式合并为一个大模式。这意味着两个表单都必须包含属于这两个模式的所有字段。
这意味着我不能只使用schema1的autoForm和只使用schema2的另一个autoform。
根据文档,我尝试实现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的规定,我仍然会收到有关autox1中FieldX为空的通知。
我还尝试了另一种使用变体的方法。
例如:
schema1 = new SimpleSchema({ field1, field2, field3 });
collection.attachSchema(schema1, {selector: {type: 'forForm1'}});
schema2 = new SimpleSchema({ fieldX, fieldY, fieldZ });
collection.attachSchema(schema2, {selector: {type: 'forForm2'}});
当我实现上述内容时,我得到一个autoform错误,指出在处理多个模式时必须传递doc的参数。
我该怎么做?
文件明确指出:
现在两个模式都已附加。当您插入文档类型时: 在文档中“简单”,它将仅针对 SimpleProductSchema。当您插入文档类型:'variant'时 在文档中,它将仅针对 VariantProductSchema。
我不知道如何通过doc = ????在模板中。有人可以指导我吗?
这是我的autoform模板:
Form1中:
{{#autoForm collection = "pgTemplates" type ="insert" doc= ???? id ="InsertForm1" }}
{{#each afFieldNames}}
{{> afQuickField name=this.name options = afOptionsFromSchema }}
{{/each}}
窗体2:
{{#autoForm collection = "pgTemplates" type ="insert" doc= ???? id ="InsertForm1" }}
{{#each afFieldNames}}
{{> afQuickField name=this.name options = afOptionsFromSchema }}
{{/each}}
答案 0 :(得分:0)
根据autoform的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}}
<强>窗体2:强>
{{#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}}