在渲染模板之前调用的Meteor JS Template渲染函数?

时间:2014-10-14 03:15:31

标签: meteor

我正在尝试在JQuery UI中使用Buttonset小部件。我已经加载了包,我的模板呈现单选按钮。我有一个“呈现”函数来调用JQ UI例程来设置buttonset:

Template.teamList.rendered = function () {
    $("#buttonsetID").buttonset();
}

但看起来渲染的函数在呈现模板之前被称为!我在函数中粘贴了一个console.log,然后在屏幕上显示任何内容之前打印到控制台。因此没有设置任何单选按钮,因此.buttonset()调用不执行任何操作。如果我在呈现页面后在控制台中进行该调用,则JQuery UI会执行正确的操作并显示我的按钮组。

在设置好所有内容后,是否应该调用.rendered函数?我做错了吗?

谢谢!

编辑:

作为一个例子,在排行榜示例中可以看到同样的事情。

如果你添加:

  Template.leaderboard.rendered = function() {
     alert($('.player').length);
  }

当页面显示时,它将显示0.如果你需要添加一些JQuery事件,或者在这种情况下是一个JQuery UI元素,这就很难访问DOM项目。

1 个答案:

答案 0 :(得分:3)

rendered仅适用于在第一次将模板添加到页面时出现在DOM中的元素。假设订阅数据需要无限长时间才能到达,然后查看模板并查看哪些元素将以默认状态显示。

使用leaderboard示例,我们无法假设在排行榜模板呈现时播放器可用(取决于订阅)。要定位播放器,您应该在播放器模板上使用rendered回调。

很难概括何时应用jQuery插件的策略,但这里有一些想法:

  • 如果元素将始终以默认状态添加,则使用rendered回调(例如,元素是硬编码的,并且不依赖于条件)。

    < / LI>
  • 使用最具体的子模板的rendered回调来定位该子项(例如,来自上方的播放器模板)。

  • 如果元素的外观取决于某个事件(例如点击按钮),请考虑使用event handler回调定位元素。

  • 如果元素的外观取决于无功状态,请考虑使用template autorun回调来定位元素。有关示例,请参阅this question