我正在尝试为我的帖子添加一个类别,所以我有一个带有选择框的表单,用户可以选择与他的帖子关联的类别。问题是,当我提交表单时,我遇到了错误,因为字段Category不是对象...我试图用formToDoc
挂钩表单来修改doc
并创建类别元素看起来很好,但它不起作用。我猜我必须处理我的数据验证,但我不知道怎么做?
以下是我的收藏品CPDM和类别:
Category = new Mongo.Collection("category");
// Création du schéma des catégories
Category.attachSchema(new SimpleSchema({
name: {
type: String,
label: "Catégorie",
max: 200
},
value: {
type: String,
label: "Catégorie Value",
max: 200
}
}));
// Création du schéma des CPDM
CPDM.attachSchema(new SimpleSchema({
title: {
type: String,
label: "Titre",
max: 200
},
content: {
type: String,
label: "Contenu",
autoform: {
afFieldInput: {
type: "textarea",
rows: 15
}
}
},
createdAt: {
type: Date,
autoform: {
omit: true
},
autoValue: function() {
if (this.isInsert) {
return new Date;
}
else {
this.unset();
}
}
},
author: {
type: String,
autoform: {
omit: true
},
autoValue: function () {
if (this.isInsert) {
if (Meteor.user()) {
return Meteor.user().username;
} else {
return "Anonyme";
}
} else {
this.unset();
}
}
},
ranking: {
type: Number,
autoValue: function () {
if (this.isInsert) {
return 0;
}
},
autoform: {
omit: true
},
min: 0,
label: "Note"
},
voters: {
type: [String],
autoform: {
omit: true
},
autoValue: function () {
if (this.isInsert) {
return [];
}
}
},
selected: {
type: Boolean,
autoform: {
omit: true
},
autoValue: function () {
if (this.isInsert) {
return false;
}
}
},
category: {
type: Object,
optional: true,
label: "Catégorie",
autoform: {
firstOption: "Sélectionner une catégorie"
}
}
}));
这是我的表格挂钩:
AutoForm.hooks({
createCPDM: { // ID du formulaire
formToDoc: function(doc) {
var categoryName = $("[name='category'] option:selected").text();
doc.category = {name:categoryName, value:doc.category};
return doc;
},
onSubmit: function (doc) { // Gestion du formulaire de soumission
var error = null;
var title = doc.title;
var content = doc.content;
var category = doc.category;
var captcha = $("#captcha").val();
var formData = {
title: title,
content: content,
category: category
};
if (captcha == 4) {
Meteor.call('createCPDM', formData, function (err) {
if (err) {
error = new Error("Une erreur s'est produite");
}
});
}
else {
error = new Error("Mauvais captcha");
}
if (error === null) {
this.done(); // Appelle onSuccess
}
else {
this.done(error); // Appelle onError
}
return false;
},
感谢您的帮助!
答案 0 :(得分:0)
我找到了解决方案,我不得不调整我的Post集合,使类别成为一个对象。像这样:
category: {
type: Object,
optional: true,
label: "Catégorie",
autoform: {
firstOption: "Sélectionner une catégorie"
}
},
"category.name": {
type: String,
label: "Catégorie",
max: 200,
autoform: {
omit: true
}
},
"category.value": {
type: String,
label: "Catégorie Value",
max: 200,
autoform: {
omit: true
}
}