Присоединение нескольких схем к одной и той же коллекции с помощью autoform и collection2

У меня есть две формы и две схемы, которые не имеют ничего общего. Но мне все равно нужно, чтобы они хранились в одной коллекции.

Eg.:

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

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

Из документации Collection2. подразумевается, что описанный выше метод фактически объединит обе схемы в одну большую схему. Это означает, что обе формы должны иметь все поля, принадлежащие обеим схемам.

Это означает, что у меня не может быть автоформы только со схемой1 и другой автоформы только со схемой2.

В соответствии с документацией я попытался реализовать replace: true, благодаря чему схема каждый раз перезаписывается. (По крайней мере я так понимаю - они не сливаются в большую схему)

Eg:

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

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

Вышеприведенное по-прежнему не устраняет проблему, и каким-то образом схемы все еще объединяются. Это означает, что я все еще получаю уведомление о том, что FieldX пуст в autoform1, даже если для заполнения fieldX не предусмотрено.

Я также попробовал другой подход, в котором вы используете варианты.

Eg.:

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

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

Когда я реализую вышеизложенное, я получаю сообщение об ошибке автоформы, говорящее о том, что аргумент doc должен быть передан при работе с несколькими схемами.

Как именно мне это сделать?

В документации конкретно указано:

Теперь обе схемы прилагаются. Когда вы вставляете документ, где тип: «простой» в документе, он будет проверяться только по схеме SimpleProductSchema. Когда вы вставляете документ, где type: 'variant' в документе, он будет проверяться только на VariantProductSchema.

Я не знаю, как мне передать doc = ???? в шаблоне. Может ли кто-нибудь направить меня?

Это мой шаблон автоформы:

Форма1:

{{#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}}

person blueren    schedule 04.08.2016    source источник


Ответы (1)


Согласно документации для автоформы:

doc: требуется для формы обновления и должен иметь как минимум свойство _id. Передайте текущий объект документа, полученный, например, с помощью вызова findOne(). Для формы вставки вы также можете использовать этот атрибут для передачи объекта, для которого установлены значения формы по умолчанию (тот же эффект, что и установка атрибута значения для каждого поля в форме).

Есть еще один параметр schema, который может пригодиться в этом случае:

schema: требуется, если коллекция не установлена. Эта схема будет использоваться для создания и проверки формы перед отправкой, поэтому вы можете указать ее вместе с коллекцией, если хотите использовать схему, которая немного отличается от той, которую использует ваша коллекция. Однако окончательный объект все равно должен будет пройти проверку на соответствие схеме коллекции. Установите одно из следующих значений:

  • Имя вспомогательной функции (без кавычек), которая возвращает экземпляр SimpleSchema.
  • Имя (в кавычках) экземпляра SimpleSchema, находящегося в пространстве имен окна.

Таким образом, вы можете попробовать установить параметр схемы в соответствии с вашим конкретным schema в каждом случае, а также попытаться передать текущий объект документа в doc.

Я полагаю, что шаблон будет выглядеть так:

Форма1:

{{#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}}
person ryder    schedule 05.08.2016