Meteor 知道何时呈现子模板 {{#每帧} {{>FrameItem} {{/每个}}
在上面的示例中,我想知道Meteor 知道何时呈现子模板 {{#每帧} {{>FrameItem} {{/每个}},meteor,Meteor,在上面的示例中,我想知道FrameItems模板中的所有FrameItem模板何时都已呈现。我原以为当所有子模板都被呈现时会调用父模板的onRendered,但它只是被立即调用。确保呈现所有子模板的常规方法是什么?以下是我将如何继续: 创建pageSession被动变量或被动字典条目。让我们称之为lastRendered 您可以使用相关框架项的\u id在框架项目模板的onRendered功能中更新它。这样,每次呈现FrameItem模板时,您就可以知道它是哪一个了 在父模板中创建一个帮助器,监
FrameItems
模板中的所有FrameItem
模板何时都已呈现。我原以为当所有子模板都被呈现时会调用父模板的onRendered
,但它只是被立即调用。确保呈现所有子模板的常规方法是什么?以下是我将如何继续:
lastRendered
框架
项的\u id
在框架项目
模板的onRendered
功能中更新它。这样,每次呈现FrameItem
模板时,您就可以知道它是哪一个了lastredered
反应变量,并检查它是否与上一个frames
项匹配。它可能是这样的(未经测试的代码):
onRendered
函数中获得反馈,可以将此代码包装成this.autorun(function(){
(tracker)),如下所示:
lastFrameIsRendered: function() {
var lastId = frames.find().limit(1).sort({$natural:-1}).fetch()._id;
return pageSession.get ("lastRendered") === lastId;
},
每次您的父模板发生更改时,都将执行该命令。以下是我将如何继续执行的步骤:
lastRendered
框架
项目的\u id
在框架项目
模板的onRendered
功能中更新它。这样,每次呈现框架项目
模板时,您就可以知道它是哪一个了lastprendered
被动变量,并检查它是否与上一个frames
项匹配。它可能看起来像这样(未测试的代码):
onRendered
函数中获得反馈,可以将此代码包装成this.autorun(function(){
(tracker)),如下所示:
lastFrameIsRendered: function() {
var lastId = frames.find().limit(1).sort({$natural:-1}).fetch()._id;
return pageSession.get ("lastRendered") === lastId;
},
每次父模板发生更改时,都将执行此操作。一种方法是使用计数器并递增它,直到它达到某个值。
在这里,计数器将在
会话中
并递增,直到达到帧的长度
iterable thing:
var lastId = frames.find().limit(1).sort({$natural:-1}).fetch()._id;
this.autorun(function() {
if (pageSession.get ("lastRendered") === lastId) {
//do your stuff
}
});
然后您只需使用跟踪器:
Template.FrameItems.onRendered(function() {
Session.set('frameCounter', 0);
});
Template.FrameItem.onRendered(function() {
Session.set('frameCounter', Session.get('frameCounter') + 1);
});
请注意,它考虑了
FrameItem
可能在奇怪的时间渲染的事实(避免出现竞争条件,如果有的话),但它不考虑新的帧。要考虑这些帧,您不会停止计算
一种方法是使用计数器并将其递增,直到达到某个值。在这里,计数器将在
会话中
并递增,直到达到帧的长度
iterable thing:
var lastId = frames.find().limit(1).sort({$natural:-1}).fetch()._id;
this.autorun(function() {
if (pageSession.get ("lastRendered") === lastId) {
//do your stuff
}
});
然后您只需使用跟踪器:
Template.FrameItems.onRendered(function() {
Session.set('frameCounter', 0);
});
Template.FrameItem.onRendered(function() {
Session.set('frameCounter', Session.get('frameCounter') + 1);
});
请注意,它考虑了
FrameItem
可能在奇怪的时间渲染的事实(避免出现竞争条件,如果有的话),但它不考虑新的帧。考虑到这些,你不会停止计算
,如果你四处搜索,有几种DIY方法可以做到这一点,但是如果有一个核心Meteor函数,那就太好了,因为如果你使用的JS插件在所有DOM el之前都无法初始化,那么它确实很常见并且很有用插入要素。仅供参考,我写了一篇“添加排名并与计数进行比较”这里的解决方案:但它需要在子模板的.onRendered
回调中运行任何JS代码,而不是在父模板中运行。如果您四处搜索,有几种DIY方法可以做到这一点,但如果有一个核心Meteor函数,这将是一件好事,因为如果您使用的JS插件在所有DOM el之前都无法初始化,这将非常常见和有用插入元素。仅供参考,我在这里编写了一个“添加排名并与计数进行比较”解决方案:但它要求在子模板的.onRendered
回调中运行任何JS代码,而不是在父模板中运行。