我在Meteor.js上使用带有autoform的把手助手。我试图在我的表单上创建一个选择下拉框,但我希望选项来自集合而不是数组。我使用collection2包定义了我的集合“Persons”,并使用simple-schema定义了模式。我插入了两个具有firstName,lastName,fullName值的人。
这是我的助手:
Handlebars.registerHelper("personSelectOption", function(options) {
peeps = Persons.find().fetch();
peeps.forEach(function(persons){
return [
{label:persons.firstName , value:persons.firstName}
];
});
});
我正在尝试让下拉框显示我的集合中每个人的firstName,当我向集合中添加更多人员时,它会自动显示在下拉框中。
我知道我在这里错过了很多,但我是一个新的程序员,我能得到的任何帮助都会很棒。
谢谢!
我试图使用把手助手,因为我看到使用autoform的唯一好例子也是使用这个助手。 autoforms中的下拉框使用:
<div class="form-group {{afHasError 'firstOptionSelect'}}">
{{afFieldLabel 'firstOptionSelect'}}
{{afFieldInput 'firstOptionSelect' firstOption="(Select Something)" options=personSelectOption}}
{{#if afFieldIsInvalid 'firstOptionSelect'}}
<span class="help-block">{{afFieldMessage 'firstOptionSelect'}}</span>
{{/if}}
</div>
选项是我试图让firstName出现的地方。 forEach是为了获得该系列中的每个名字。如何在不使用把手助手的情况下使用meteor语法处理自动形式?
由于
答案 0 :(得分:0)
正如Cuberto所说,Meteor使您能够使用Meteor自己的语法向模板添加帮助程序。还不清楚你要对forEach
块做什么,但这样的事情应该有效:
Template.myTemplate.helpers({
personSelectOption: function() {
return Persons.find().fetch();
}
});
然后,您可以使用以下内容访问html中所需的信息:
<template name="myTemplate">
<select>
{{#each personSelectOption}}
<option value="{{this.firstName}}">{{this.firstName}}</option>
{{/each}}
</select>
</template>
您可以在模板中访问所需的任何文档属性,而无需构建某些特殊结构并从帮助程序返回该属性。虽然如果你真的想这样做(因为你需要以某种方式改变属性),你应该使用map
而不是forEach
来返回修改对象的单个数组
答案 1 :(得分:0)
最终为我工作的是:
车把助手:
Handlebars.registerHelper("personSelect", function() {
peeps = Persons.find();
people = peeps.map(function(peeps) {
return {label:peeps.fullName, value:peeps.fullName };
});
return people;
});
对于autoform模板:
<div class="form-group {{afHasError 'firstOptionSelect'}}">
{{afFieldLabel 'firstOptionSelect'}}
{{afFieldInput 'firstOptionSelect' firstOption="(Select Something)" options= personSelect }}
{{#if afFieldIsInvalid 'firstOptionSelect'}}
<span class="help-block">{{afFieldMessage 'firstOptionSelect'}}</span>
{{/if}}
</div>
我没有使用Meteor Template.helper,因为我需要在autoform模板中显示模板。我还没有办法做到这一点所以我决定使用handlebars.helper。如果有人知道如何这样做,我会全力以赴。