2017-02-23 24 views
1

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

Как сохранить/обновить объект в коллекции, чтобы вставить объект 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: {перед: {

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

ответ

1

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

  1. Предполагая, что у вас есть определенный шаблон шаблона (который я назвал «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'); 
     } 
    }); 
    } 
}); 

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

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

+0

спасибо. Я использовал Autoform, но для этой задачи мне пришлось использовать HTML-формы и отправлять данные в метод. Я искал более компактное решение. И я был убежден, что только этот способ дает больше контроля. – Siteogra