我有两个颜色和汽车系列。 在车里可能选择颜色。
如何在集合中保存/更新对象,以便在Car对象中嵌入Color对象?
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:{
但它无效
答案 0 :(得分:1)
有几种方法可以实现这一点,解决方案很大程度上取决于您可能正在使用的任何相关软件包。如果没有看到创建新卡的现有代码,那么很难给出一个有效的例子。不过,这里有一个使用核心Meteor API的例子。
定义一个Meteor方法来处理插入/更新Car。
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);
}
},
});
为表单提交添加一个事件处理程序,用于调用已定义的Method。
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');
}
});
}
});
简而言之,您只需要确保您可以访问为Car保存的Color ID,然后确保在Color集合上执行查找以检索必要的Color文档,然后将其用于您的汽车插入或更新。
如果您有任何问题或需要进一步解释,请与我们联系。