在SimpleSchema中填充数据库中的SELECT选项

时间:2016-05-24 11:31:36

标签: meteor meteor-autoform select2 simple-schema

在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({});

      }
    }
  }, 

但它不会返回收集结果,并在没有错误消息的情况下崩溃应用程序。

3 个答案:

答案 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不是一个好主意,但我接受建议:)