Meteor创建选择,然后查找所选状态

Meteor创建选择,然后查找所选状态,meteor,selected,Meteor,Selected,我对Meteor还不熟悉,正在建立一个演示站点来使用它,但我注意到了一个有趣的问题。在下面的代码中,我试图创建一个选择框,并在其中填充用户出生日期的年份。这方面的助手似乎很直截了当。问题是将Mongo的查询绑定到它,这样我就可以显示所选内容。我最终创造的是可怕的。多次调用db,然后isSelected helper再次运行并对所有内容进行不必要的旋转 显然,必须有一种方法来创建选择,同时在一次过程中找到所选选项,最好是不进行额外的db调用。但是helper只返回一个值。可能返回一个包含年份和选择

我对Meteor还不熟悉,正在建立一个演示站点来使用它,但我注意到了一个有趣的问题。在下面的代码中,我试图创建一个选择框,并在其中填充用户出生日期的年份。这方面的助手似乎很直截了当。问题是将Mongo的查询绑定到它,这样我就可以显示所选内容。我最终创造的是可怕的。多次调用db,然后isSelected helper再次运行并对所有内容进行不必要的旋转

显然,必须有一种方法来创建选择,同时在一次过程中找到所选选项,最好是不进行额外的db调用。但是helper只返回一个值。可能返回一个包含年份和选择状态的数组?我想我还没有在我读过的任何东西上看到过这一点,但对我来说《流星》还为时过早,我什么都不知道。有人对如何创造高性能的产品有想法吗?谢谢

<template name="accountProfile">
    {{#with accountDetails}}

    Other bits of data using accountDetails here

    <li>
        {{> userDateOfBirth}}
    </li>
    {{/with}}
</template>

<template name="userDateOfBirth">
        <select name="userDateOfBirthYear">
        {{#each displayYears}}
            <option value="{{this}}" selected="{{isSelected}}">{{this}}</option>
        {{/each}}
        </select>
</template>


Template.accountProfile.helpers({
    'accountDetails': function(){
        var currentUser = Meteor.userId();
        var userProfileCreated = User.findOne({ createdBy: currentUser });
        return userProfileCreated;  
    }
});

Template.userDateOfBirth.helpers({
    'displayYears': function(){
        var listOfYears = [];
        var numberOfYearsToList = 120;
        for (var i = numberOfYearsToList-1; i >= 0; i--) {
            listOfYears[i] = 2015 - i;
        };
        return listOfYears;
    },
    'isSelected' : function(){
        var currentUser = Meteor.userId();
        var userProfileCreated = User.findOne({ createdBy: currentUser });
        var numberOfYearsToList = 120;
        for (var i = numberOfYearsToList-1; i >= 0; i--) {
        console.log(2015 - i + " " + this);
            if((this) == moment(new Date(userProfileCreated.dateOfBirth)).format("YYYY")){
                return "selected";
            }
        };
    }
});
由于accountDetails已返回当前用户的配置文件,因此您可以使用../access父数据上下文访问其dateOfBirth,即使在displayYears上下文中也是如此,这有助于避免对数据库进行多次查询

<template name="accountProfile">
  {{#with accountDetails}}
    //- Other bits of data using accountDetails here
    <li>
      {{> userDateOfBirth}}
    </li>
  {{/with}}
</template>

<template name="userDateOfBirth">
  <select name="userDateOfBirthYear">
    {{#each displayYears}}
      <option value="{{this}}" selected="{{isSelected ../dateOfBirth}}">{{this}}</option>
    {{/each}}
  </select>
</template>

Template.userDateOfBirth.helpers({
  'isSelected' : function(dateOfBirth) {
    if (this == moment(new Date(dateOfBirth)).format("YYYY")) {
      return "selected";
    }
  }
});

太好了,谢谢!正是我想要的。