一直在抓我的头,所以这里有一个最简单的方法来观察它--我正在用这个:
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>
我试图等待所有的"singleDays“呈现,但是我记录的计数在刷新时通常是不同的。我会得到从0到正确值的任何东西,但我不明白为什么。这似乎是正确的地方叫它,我担心,也许双“每个”是不是太慢?
我已经尝试过计时器(老实说,我不应该这么做),甚至是DOM突变观察者(这看起来有点过火),但是确实有一种纯粹的Meteor方法来解决这个问题,有什么想法吗?
发布于 2015-03-11 23:18:03
这里发生的事情似乎是,在向客户端发送Mongo集合之前,正在呈现模板。具体来说,meteor尽可能快地呈现模板,这意味着它没有“等待”任何数据从服务器发送到客户端的概念。因此,如果在非反应性调用(Template.rendered)中放置与数据库查询有关的任何间接内容,那么它将以undefined
的形式执行数据。
我假设您的dayOfWeek
助手看起来如下所示:
Template.today.helpers({
daysOfWeek: function () {
var today = CollectionName.findOne();
return today.daysOfWeek;
}
})
(或者您正在使用路由器将一天直接传递给模板)
无论哪种方式,在您的路由器中,在任何呈现发生之前,您都需要等待Mongo集合项被发送到客户端。如果您使用的是铁路由器,您只需“等待”您的数据/订阅。
更多信息可以在这里找到:https://github.com/iron-meteor/iron-router/blob/devel/Guide.md#wait-and-ready
如果您仍然在使用自动更新,那么您可以用数据库查询替换订阅。
https://stackoverflow.com/questions/28998437
复制相似问题