如何使用 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',
}
},
我刚刚找到了这个很棒的 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',
}
},