Meteor 知道何时呈现子模板 {{#每帧} {{>FrameItem} {{/每个}}

Meteor 知道何时呈现子模板 {{#每帧} {{>FrameItem} {{/每个}},meteor,Meteor,在上面的示例中,我想知道FrameItems模板中的所有FrameItem模板何时都已呈现。我原以为当所有子模板都被呈现时会调用父模板的onRendered,但它只是被立即调用。确保呈现所有子模板的常规方法是什么?以下是我将如何继续: 创建pageSession被动变量或被动字典条目。让我们称之为lastRendered 您可以使用相关框架项的\u id在框架项目模板的onRendered功能中更新它。这样,每次呈现FrameItem模板时,您就可以知道它是哪一个了 在父模板中创建一个帮助器,监

在上面的示例中,我想知道
FrameItems
模板中的所有
FrameItem
模板何时都已呈现。我原以为当所有子模板都被呈现时会调用父模板的
onRendered
,但它只是被立即调用。确保呈现所有子模板的常规方法是什么?

以下是我将如何继续:

  • 创建pageSession被动变量或被动字典条目。让我们称之为
    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;
    },
    

    每次您的父模板发生更改时,都将执行该命令。

    以下是我将如何继续执行的步骤:

  • 您可以创建一个pageSession被动变量或被动字典条目。我们将其称为
    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代码,而不是在父模板中运行。