我正在尝试在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项目。
答案 0 :(得分:3)
rendered
仅适用于在第一次将模板添加到页面时出现在DOM中的元素。假设订阅数据需要无限长时间才能到达,然后查看模板并查看哪些元素将以默认状态显示。
使用leaderboard示例,我们无法假设在排行榜模板呈现时播放器可用(取决于订阅)。要定位播放器,您应该在播放器模板上使用rendered
回调。
很难概括何时应用jQuery插件的策略,但这里有一些想法:
如果元素将始终以默认状态添加,则使用rendered
回调(例如,元素是硬编码的,并且不依赖于条件)。
使用最具体的子模板的rendered
回调来定位该子项(例如,来自上方的播放器模板)。
如果元素的外观取决于某个事件(例如点击按钮),请考虑使用event handler回调定位元素。
如果元素的外观取决于无功状态,请考虑使用template autorun回调来定位元素。有关示例,请参阅this question。