我使用了aldeed:autoform,aldeed:simple-schema,aldeed:collection2和mdg:validated-method,用于对集合进行插入。
这是AutoForm的临时代码:
<template name="Areas_agregar">
{{> Titulos_modulos title="Areas" subtitle="Agregar" cerrar=true}}
{{
#autoForm
collection=areasColecction
id="areas_agregar"
type="method"
meteormethod="areas.insert"
}}
{{> afQuickField name='nombre'}}
{{> afArrayField name='subareas'}}
<button type="submit">Save</button>
<button type="reset">Reset Form</button>
{{/autoForm}}
</template>
这是集合的架构:
Areas.schema = new SimpleSchema({
_id: {
type: String,
regEx: SimpleSchema.RegEx.Id
},
nombre: {
type: String,
label: 'Nombre'
},
subareas: {
type: [String],
label: 'Subareas'
}
});
这是插入方法:
const AREA_FIELDS_ONLY = Areas.simpleSchema().pick(['nombre', 'subareas', 'subareas.$']).validator({ clean: true, filter: false });
export const insert = new ValidatedMethod({
name: 'areas.insert',
validate: AREA_FIELDS_ONLY,
run({ nombre, subareas }) {
const area = {
nombre,
subareas
};
Areas.insert(area);
},
});
我在Chrome的开发者控制台中收到了以下错误:
&#34; areas_agregar&#34;的SimpleSchema无效键背景: 阵列[1] 0:对象 名称:&#34; _id&#34; 输入:&#34;必需&#34; 值:null proto :对象 长度:1 proto :数组[0]
就像错误显示一样,问我一个_id字段的值,但我在插入更新时,它没有任何意义。
知道可能出现什么问题吗?
答案 0 :(得分:0)
autoform将模式中所需的键视为表单输入中所需的,这对_id
键不起作用。
如果您使_id可选:true,那么您的插入将起作用,Meteor将自动插入_id
或者您可以使用自动模式的变体来省略_id
键:
let schemaObject = {
nombre: {
type: String,
label: 'Nombre'
},
subareas: {
type: [String],
label: 'Subareas'
}
};
Areas.formSchema = new SimpleSchema(schemaObject); // use for form
schemaObject._id = {
type: String,
regEx: SimpleSchema.RegEx.Id
};
Areas.collectionSchema = new SimpleSchema(schemaObject); // use for collection