Meteor创建选择,然后查找所选状态
我对Meteor还不熟悉,正在建立一个演示站点来使用它,但我注意到了一个有趣的问题。在下面的代码中,我试图创建一个选择框,并在其中填充用户出生日期的年份。这方面的助手似乎很直截了当。问题是将Mongo的查询绑定到它,这样我就可以显示所选内容。我最终创造的是可怕的。多次调用db,然后isSelected helper再次运行并对所有内容进行不必要的旋转 显然,必须有一种方法来创建选择,同时在一次过程中找到所选选项,最好是不进行额外的db调用。但是helper只返回一个值。可能返回一个包含年份和选择状态的数组?我想我还没有在我读过的任何东西上看到过这一点,但对我来说《流星》还为时过早,我什么都不知道。有人对如何创造高性能的产品有想法吗?谢谢Meteor创建选择,然后查找所选状态,meteor,selected,Meteor,Selected,我对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";
}
}
});
太好了,谢谢!正是我想要的。