如何使用 Meteor 中 collection 的值填充 autoForm select?

How to populate autoForm select with values from collection in Meteor?

我刚刚找到了这个很棒的 Meteor autoForm 包,我想将它与 select2 一起使用。

我的目标是使用自动表单轻松地为我的 collection 之一创建输入表单。障碍是:如何用另一个 collection 的字段填充它以及如何使它成为 multi-select?

在我的 lib/collections 我声明了一个 Meteor collection:

Clients = new Mongo.Collection('clients');
Clients.attachSchema(new SimpleSchema({
    clientName: {
        type: String,
        label: "Mandator Name",
        max: 200
    }
}));

现在我没有得到关于 autoForm 的文档。在atmospherejs页面(https://atmospherejs.com/aldeed/autoform)如果我没记错的话我应该使用这样的东西:

{{#autoForm collection="Clients" id="insertClientForm" type="insert"}}
    {{> afFieldInput name="clientName" options=options}}
{{/autoForm}}

然后像这样写一些JS:

Template.registerHelper({
    options: function() {
        return Clients.find({}, {fields: {clientName: 1}});
    }
});

模板呈现正常,因为我可以看到一个输入框。但是它不是 multi-select 并且它根本不允许我 select 任何值。

对问题出在哪里有任何想法吗?

奖金问题:如何在自动表单生成的 select 输入上使用 select2? 编辑:使用aldeed:autoform-select2来使用select2.

您需要将 collection 映射到标签和值;标签是客户将看到的内容,值是提交时将保存的内容。

https://github.com/aldeed/meteor-autoform#use-a-helper

Template.registerHelper({
    options: function() {
        return Clients.find({}, {fields: {clientName: 1}}).map(function (c){
      return {label: c.clientName, value: c._id};;
    }
});

如果您想要 multi-select,您需要将架构键类型设为 [String] 而不是 String

我已经使用 Meteor 测试了这个解决方案

事实:collection2 aldeed:autoform natestrauser:select2 aldeed:autoform-select2

假设您有一个包含用户个人资料信息的表单,其中一个字段是 'occupation'(如他们的工作等),并且您希望他们 select 来自名单。

1) 发布您要用于 Select 选项的 collection。

在服务器上

Meteor.publish('occupations', function () {
  return Occupations.find();
});

2) 在客户端

订阅collection

在客户端

Meteor.subscribe('occupations');

3) 为表单模板创建助手

Template.CreateUser.helpers({
  listOccupations: function () {
    return Occupations.find({}).fetch();
  },
});

4) 最后在 autoForm 字段的选项参数中引用该助手 - 在这种情况下我使用了 afQuickField

{{> afQuickField name='occupations' multiple=true tags=true options=listOccupations}}

5) 并确保您的模式设置正确以使用 Select2

occupations: {
    type: [String],
    optional:true,
    label: 'Occupation',
    autoform:{
      type:"select2",
      placeholder: 'Comma spaced list of occupations',
    }
  },