gpt4 book ai didi

javascript - 传递空格键的当前值 :this as argument to new helper in meteor/blaze

转载 作者:行者123 更新时间:2023-12-03 03:58:26 26 4
gpt4 key购买 nike

我在 Mongo 集合中查找年份的独特实例,并将它们作为列表项传递到我的模板。在这些下面,我想要包含给定年份中唯一出现的月份的子列表,但我不知道如何将年份传递给我的 Month() 帮助器,以便我可以限制查询。

HTML 是...

        <template name="list">
<ul>
{{#each year}}
<li>
<h2>{{this}}</h2>
</li>
<ul>
{{#each month}}
<li>
<h3>{{this}}</h3>
</li>
{{/each}}
</ul>
{{/each}}
</ul>
</template>

JS 是...

  let monthNames = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
];

let findYears = function(){
var distinctYears = _.uniq(Events.find({}, {
sort: {start: 1}, fields: {start: true}
}).fetch().map(function(x) {
var d = new Date(x.start);
return d.getFullYear();
}), true);
return distinctYears;
};

let findMonths = function(){
var distinctMonths = _.uniq(Events.find({}, {
sort: {start: 1}, fields: {start: true}
}).fetch().map(function(x) {
var d = new Date(x.start);
return monthNames[d.getMonth()];
}), true);
return distinctMonths;
};

Template.list.onCreated( () => {
let template = Template.instance();
template.subscribe( 'events' );
});

Template.list.helpers({
year() {
foundYears = findYears();
return foundYears;
},
month() {
foundMonthNames = findMonths();
return foundMonthNames;
}
});

我希望能够将我的year() 帮助器当前所在的年份作为我的month() 帮助器的参数传递,以便我可以编辑我的findMonths 函数以将其查询限制为仅属于该年份的事件一年,但我不知道如何执行此操作,也不知道如何从客户端查询 MongoDB 仅一个月(我所有的事件日期均为 ISODate 格式)。

我希望我的问题是清楚的。我很抱歉,我知道我可能使用了不正确的术语。

最佳答案

如果我理解正确,您有两个问题 - 将 year 传递到 month 帮助器中,并使用该参数使您的查询更具体 - 是这样吗?

要将 year 传递给帮助程序,请按照 {{#each thing in things}} 约定更改代码(解释 here )。所以你的模板代码将变成:

<template name="list">
<ul>
{{#each year in getYears}}
<li>
<h2>{{year}}</h2>
</li>
<ul>
{{#each month in (getMonths year)}}
<li>
<h3>{{month}}</h3>
</li>
{{/each}}
</ul>
{{/each}}
</ul>
</template>

然后你的 year 助手将保持不变(除了我更改了名称以使其更清晰!),并且你的 month 助手将只接受参数:

Template.list.helpers({
getYears() {
foundYears = findYears();
return foundYears;
},
getMonths(year) {
foundMonthNames = findMonths(year);
return foundMonthNames;
}
});

最后,您的 findMonths 函数。可能有一种不同/更简单的方法,但您可以通过比较较早和较晚的日期(即大于上一年的 12 月 31 日且小于下一年的 1 月 1 日)来获取年份:

let findMonths = function(year){
var query = {
start: {
$gt: new Date(year - 1, 11, 31),
$lt: new Date(year + 1, 0, 1)
}
}
var distinctMonths = _.uniq(Events.find(query, {
sort: {start: 1}, fields: {start: true}
}).fetch().map(function(x) {
var d = new Date(x.start);
return monthNames[d.getMonth()];
}), true);
return distinctMonths;
};

(如果您想在午夜之前添加小时、分钟和毫秒)

关于javascript - 传递空格键的当前值 :this as argument to new helper in meteor/blaze,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44837173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com