Есть ли способ повторно использовать шаблон для хранения данных в разных идентичных коллекциях с помощью метеора 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, то мне придется иметь дело с поддержкой 30x3 = 90 шаблонов с разными именами шаблонов, даже если они идентичны!

Может быть, вы знаете какое-нибудь лучшее средство, чтобы справиться с этим?


ИСХОДНЫЙ ВОПРОС

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

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

Например, у меня есть 3 варианта выбора из списка-группы. А Б В

У меня есть общая схема, определенная для 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);

Это возможно? Если это так, я был бы очень признателен за некоторые указатели для меня, чтобы двигаться в правильном направлении.

Спасибо


person blueren    schedule 19.07.2016    source источник
comment
Не могли бы вы использовать наследование/полиморфизм, чтобы справиться с этим? Создайте базовую схему, а затем расширите ее до более конкретных экземпляров. Тогда у вас есть один на коллекцию.   -  person CodeChimp    schedule 19.07.2016
comment
Я немного уточняю свой вопрос, так как получил ответ на первую часть.   -  person blueren    schedule 20.07.2016


Ответы (1)


Почему эти схемы условны? Используете ли вы несколько схем для каждой из трех коллекций? Назначение схемы — проверка структуры вставок и обновлений. Кроме того, схема не предназначена для динамического присоединения/удаления. Я бы рекомендовал просто сделать:

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

А затем выполните вставку в соответствующую схему на основе вашего варианта.

Наконец, если у вас есть 3 идентичные схемы, почему бы просто не объединить их в одну и выделить их какой-либо переменной type (по сути, значением вашей переменной option.

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

В противном случае вы всегда будете иметь этот неуклюжий сборщик коллекций, когда будете читать или писать один из этих объектов.

person Michel Floyd    schedule 19.07.2016
comment
Спасибо! В конце концов, я действительно хотел, чтобы если пользователь выбрал вариант B через вариант A, тогда форма должна быть сохранена в X Collection. Точно так же, если пользователь выбрал вариант A через вариант C, форма должна быть сохранена в коллекции Y. Схема и форма сами по себе должны быть идентичными. Я прикрепил схему ко всем трем коллекциям, как вы упомянули. Однако, когда дело дошло до шаблонов, мне пришлось реплицировать их три раза, так как не может существовать несколько шаблонов с одинаковыми именами. - person blueren; 20.07.2016
comment
Моя единственная претензия к вышесказанному заключается в том, что если вместо 3 шаблонов будет 30, то мне придется иметь дело с 30x3 = 90 шаблонами с разными именами шаблонов, даже если они идентичны! Может быть, вы знаете какое-нибудь лучшее средство, чтобы справиться с этим? Я также обновлю исходный вопрос - person blueren; 20.07.2016
comment
Вы можете просто создать массив шаблонов, а затем проиндексировать их. Лично я бы оставил свою модель данных DRY. Повторение схемы кажется очень странным. - person Michel Floyd; 20.07.2016
comment
Не могли бы вы предоставить указатели на создание массива шаблонов? Вы имеете в виду это? - person blueren; 20.07.2016