Как сохранить / обновить объект в коллекции и встроить объект в объект?

У меня есть две коллекции цветов и автомобилей. В машине возможно выбрать цвет.

Как сохранить / обновить объект в коллекции, чтобы встроить объект Color в объект Car?

 Cars = new Mongo.Collection('cars');
    Cars.attachSchema(new SimpleSchema({
        colorId: {
            label: 'Color',
            type: String,
            autoform: {
                options: function () {
                    return Colors.find().map(function (p) {
                        return {label: p.colorName, value: p._id};
                    });
                },
                label: false
            }
        },

        color: {
            type: Object,
        },
        'color._id': {
            type: String,
            autoform: {
                omit: true,
            },
        },
        'color.colorName': {
            type: String,
            autoform: {
                omit: true,
            },
        },
        'color.colorCode': {
            type: String,
            autoform: {
                omit: true,
            },
        },
    }));


Colors = new Mongo.Collection('colors');
Colors.attachSchema(new SimpleSchema({
    colorName: {
        type: String,
        label: "Color Name",
        max: 20,
    },
    colorCode: {
        type: String,
        optional: true,
        label: "Color Code",
        autoform: {
            afFieldInput: {
                type: "color"
            }
        }
    },
}));

Я пытаюсь использовать AutoForm.hooks({ insertCarForm: {before: {

но это не сработало

1 ответ

Решение

Есть несколько способов, которыми вы можете достичь этого, и решение в основном зависит от любых соответствующих пакетов, которые вы можете использовать. Трудно привести рабочий пример, не видя существующий код, который создает новые "карточки". Тем не менее, вот пример использования основного Meteor API.

  1. Предполагая, что у вас есть определенная форма Template (которую я назвал manageCar), вы бы сделали что-то вроде этого.

Определите Метеоритный метод для обработки вставки / обновления Автомобиля.

Meteor.methods({
  updateCar: function(carDoc) {
    check(carDoc, { /* carDoc schema */ });

    const color = Colors.findOne(carDoc.colorId);
    carDoc.color = color;

    if (carDoc._id) {
      Cars.update(carDoc._id, {
        $set: {
          colorId: carDoc.colorId,
          color: carDoc.color,      
        }
      })
    } else {
      Cars.insert(carDoc);
    }
  },
});

Добавьте обработчик событий для отправки формы, которая вызывает определенный метод.

Template.manageCar.events({
  'click .js-save-car'(event, instance) {
    const data = {
      _id: event.target._id.value,
      colorId: event.target.colorId.value
    };

    Meteor.call('updateCar', data, function(error, result) {
      if (!error) {
        alert('Car updated successfully');
      }
    });
  }  
});

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

Дайте мне знать, если у вас есть какие-либо вопросы или вам нужны дальнейшие объяснения.

Другие вопросы по тегам