有没有办法使用 meteor SimpleSchema + Autoforms 重用模板将数据存储到不同的相同集合中?

Is there a way to reuse a template for storing data into different identical collections using meteor SimpleSchema + Autoforms?


我正在稍微更新原始问题,因为我找到了我一直在寻找的第一部分的答案。

新问题:

截至目前,我有一个单一的模式定义,它附加到 3 个集合,即 C1、C2、C3。

 some_schema = new SimpleSchema ({
    ...
    });
C1.attachSchema(some_schema);
C2.attachSchema(some_schema);
C3.attachSchema(some_schema);

我所做的最终目标是:

如果用户选择option B via option A,则表格必须是stored in C1 Collection。同样,如果用户选择 option A via option C,则表单必须是 stored in C2 collection。 无论用户如何以 option A 结尾,呈现给用户的表单本身都是相同的。

当涉及到模板时,我不得不复制它们 3 次,因为不能存在多个同名的模板。

我对上述方法的唯一抱怨是,如果有 30 个而不是 3 个模板,那么我最终将不得不处理维护 30x3 = 90 个具有不同模板名称的模板,即使它们是相同的!

您是否知道有更好的方法来处理这个问题?


原始问题

我试图重用我编写的特定架构定义。是否可以根据条件将相同的模式定义附加到不同的集合?

最后,我需要根据选择的下拉列表将相同类型的对象存储在不同的集合中。

例如,我有 3 个选项可供从列表组中选择。 一种 乙 C

我有一个为 X 定义的通用架构。

根据所做的选择(A B 或 C),我需要将架构附加到 collection1 collection2 或 collection3。

基本思路是..

some_schema = new SimpleSchema ({
...
});

if ( option A)
then collection1.attachSchema(some_schema);
else if (option B)
then collection2.attachSchema(some_schema);
else if (option C)
then collection3.attachSchema(some_schema);

这可能吗?如果是这样,我真的很感激一些指示,让我朝着正确的方向前进。

谢谢

为什么这些模式是有条件的?您是否为 3 个集合中的每一个都使用了多个模式?模式的目的是验证插入和更新的结构。此外,模式并不真正意味着 attached/removed 是动态的。我建议只做:

collection1.attachSchema(some_schema);
collection2.attachSchema(some_schema);
collection3.attachSchema(some_schema);

然后根据您的选择插入到适当的架构中。

最后,如果您有 3 个相同的模式,为什么不将它们组合成一个并用某种 type 变量(本质上是 option 变量的值来区分它们。

doc.type = option;
collection.insert(doc);

否则,每当您读取或写入这些对象之一时,您总会遇到这个笨拙的集合选择器。