2013-12-11 39 views
0

我在Meteor.js上使用了一个带autoform的车手助手。我试图在我的表单上做一个选择下拉框,但我希望选项来自集合而不是数组。我已经使用collection2包定义了我的集合“Persons”,并使用简单模式定义了模式。我已经插入了名字,姓氏,全名值的两个人。如何在车把手助手中使用集合

这里是我的助手:

Handlebars.registerHelper("personSelectOption", function(options) { 
peeps = Persons.find().fetch(); 

peeps.forEach(function(persons){ 

    return [ 
    {label:persons.firstName , value:persons.firstName} 
]; 
}); 
}); 

我试图让下拉框中显示的每个人,我在我的收藏,并作为中的firstName我加上更多的人来收集它会在自动显示下拉框。

我知道我在这里错过了很多,但我是一个新的编码器,任何帮助我都会很棒。

谢谢!

我想使用手柄帮手,因为我看到使用autoform的唯一好例子也是使用这个帮手。自动方式下拉框使用此:

<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则是为了获得收藏中的每一个名字。我如何使用流星语法来使用自动形式而不使用把手助手?

感谢

+0

你为什么使用'Handlebars.registerHelper'?你读过文档吗?只需通过在模板上定义一个函数来添加一个帮助器:'Template.myTemplate.myHelper = function(){};' – sbking

回答

0

这是结束了,我的工作:

车把帮手:

Handlebars.registerHelper("personSelect", function() { 

peeps = Persons.find(); 


people = peeps.map(function(peeps) { 

return {label:peeps.fullName, value:peeps.fullName }; 

}); 
return people; 
}); 

而对于自动窗体模板:

<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> 

我不使用流星Template.helper因为我需要在autoform模板中显示模板。我还没有找到办法做到这一点,所以我决定改用handlebars.helper。如果有人知道如何做到这一点,我是全部耳朵。

0

由于Cuberto说,流星给你的助手添加到使用流星自己的语法模板的能力。它也不清楚你试图用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来返回修改对象的单个数组。