在Meteor中使用SimpleSchema和AutoForm + Select2插件,我试图从数据库中为Select字段生成Options。
'职业'收藏品发布,并收集了一份“职业”杂志。在Meteor中定义。
在SimpleSchema中我有: -
occupations: {
type: [String],
optional:true,
label: 'Occupation',
autoform:{
type:"select2",
placeholder: 'Comma spaced list of occupations',
options: function () {
Meteor.subscribe('occupations');
return Occupations.find({});
}
}
},
但它不会返回收集结果,并在没有错误消息的情况下崩溃应用程序。
答案 0 :(得分:1)
处理此问题的最佳方法似乎是通过帮助程序提供选项列表。
{{> afQuickField name='occupations' multiple=true tags=true options=listOccupations}}
其中listOccupations
是包含表单的模板中的帮助程序。
Template.myForm.helpers({
listOccupations: function () {
Meteor.subscribe('occupations');
return Occupations.find({}).fetch();
}
});
我们从schena中删除了options对象
occupations: {
type: [String],
optional:true,
label: 'Occupation',
autoform:{
type:"select2",
placeholder: 'Comma spaced list of occupations',
}
},
答案 1 :(得分:0)
你尝试过这种方法:
autoform: {
options: {
var occupations = [];
Occupations.find().map(function(occ) {
occupations.push(
{label: occ.description, value: occ._id}
);
});
return occupations;
}
}
希望这会有所帮助..
答案 2 :(得分:0)
我有同样的问题。我在/ lib / collections文件夹中定义了我的集合模式,它在服务器端和客户端都运行。鉴于此,我使用的console.log在服务器端打印正确的值,在客户端打印一个空数组。 我做的是:
if (Meteor.isClient){
Meteor.subscribe('service-categories-list', {
onReady: function(){
const serviceCategories = ServiceCategories.find({}).map(function(item, index) {
return {
label: item.name,
value: item.slug
};
});
Schema2._schema.type.autoform.options = serviceCategories;
}
})
}
我知道使用_schema不是一个好主意,但我接受建议:)