一直在摸不着头脑,所以这是查看它的最简单方法 - 我用这个:
Template.today.rendered = function() {
console.log(this.firstNode.children.length);
};
只需尝试获取所谓的呈现的项目数。模板看起来像:
<template name="today">
<div class="todaySlider">
{{#each dayOfWeek}}
{{> singleDay}}
{{/each}}
</div>
</template>
如果它有任何重要性,则singleDay如下:
<template name="singleDay">
<div class="day {{isCurrent}}">
<h2 class="date">{{date}}</h2>
{{#each items}}
{{> item }}
{{/each}}
</div>
</template>
我试图等待所有&#34;单日&#34;为了渲染,不过我计算的日志记录在刷新时通常是不同的。我会得到0到正确值的任何东西,我不明白为什么。这似乎是一个称之为正确的地方,我担心这可能是双重的&#34;每个&#34;太慢了?
我已经尝试过定时器(我真的不应该这样),甚至是DOM Mutation Observers(看起来有点矫枉过正)但是肯定有一种纯粹的Meteor方法可以解决这个问题吗?
答案 0 :(得分:1)
Template.rendered在渲染模板时发生,但这并不意味着其中会有任何数据。
我很确定你需要在帮手里面做这件事。
每个助手都不必返回游标,他们也可以返回一个数组。如果“singleDays”的数量很短,您可以将数组发送到模板而不是光标。这有点难看,可能有更好的方法来做到这一点,但我认为这样可行。
Template.today.helpers({
dayOfWeek: function() {
var days = DaysCollection.find({}).fetch();
if (days[days.length - 1]) days[days.length - 1].isLast = true;
return days;
}
});
我认为{{isCurrent}}是你添加你正在谈论的额外课程的地方。如果是这样,请让isCurrent帮助器查找this.isLast为真。
答案 1 :(得分:1)
似乎这里发生的事情是在将Mongo集合发送到客户端之前呈现模板。更具体地说,流星尽可能快地渲染你的模板,这意味着它没有等待&#39;等等的概念。用于从服务器发送到客户端的任何数据。因此,如果您在非响应调用(Template.rendered)内部间接放置有关数据库查询的任何内容,则它将使用undefined
数据执行。
我假设您的dayOfWeek
助手看起来像这样:
Template.today.helpers({
daysOfWeek: function () {
var today = CollectionName.findOne();
return today.daysOfWeek;
}
})
(或者您可能正在使用路由器将这一天直接传递给模板)
无论哪种方式,在路由器中,您需要等待Mongo集合项在发生任何渲染之前发送到客户端。如果您使用的是Iron-Router,则只需等待&#39;为您的数据/订阅。
可在此处找到更多信息:https://github.com/iron-meteor/iron-router/blob/devel/Guide.md#wait-and-ready
如果您仍在使用自动发布,则可以使用数据库查询替换订阅。