Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在呈现模板之前调用Meteor JS模板呈现函数?_Meteor - Fatal编程技术网

在呈现模板之前调用Meteor JS模板呈现函数?

在呈现模板之前调用Meteor JS模板呈现函数?,meteor,Meteor,我试图在jQueryUI中使用Buttonset小部件。我已经加载了包,我的模板可以很好地呈现单选按钮。我有一个“呈现”函数来调用JQ UI例程来设置按钮集: Template.teamList.rendered = function () { $("#buttonsetID").buttonset(); } 但是它看起来像是在呈现模板之前调用了呈现函数!我在函数中插入一个console.log,它会在屏幕上出现任何内容之前打印到控制台。因此没有设置任何单选按钮,因此.buttonse

我试图在jQueryUI中使用Buttonset小部件。我已经加载了包,我的模板可以很好地呈现单选按钮。我有一个“呈现”函数来调用JQ UI例程来设置按钮集:

Template.teamList.rendered = function () {
    $("#buttonsetID").buttonset();
}
但是它看起来像是在呈现模板之前调用了呈现函数!我在函数中插入一个console.log,它会在屏幕上出现任何内容之前打印到控制台。因此没有设置任何单选按钮,因此.buttonset()调用不执行任何操作。如果我在呈现页面后在控制台中进行调用,jQueryUI会做正确的事情,并显示我的按钮集

.rendered函数不应该在所有设置完成后调用吗?我做错什么了吗

谢谢

编辑:

例如,在排行榜示例中也可以看到同样的情况

如果您添加:

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

显示页面时,它将显示0。如果需要添加一些JQuery事件,或者在本例中需要添加JQuery UI元素,则很难访问DOM项。

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

使用该示例,我们不能假设在排行榜模板呈现时玩家可用(这取决于订阅)。要以玩家为目标,应使用玩家模板上的
rendered
回调

很难概括何时应用jQuery插件的策略,但以下是一些想法:

  • 如果元素总是以默认状态添加(例如,元素是硬编码的,不依赖于条件),请使用
    呈现的
    回调

  • 使用
    呈现的
    回调最具体的子模板以该子模板为目标(例如,上面的播放器模板)

  • 如果元素的外观取决于事件(例如,单击按钮),请考虑使用回调来定位该元素

  • 如果元素的外观取决于反应状态,请考虑使用回调来定位该元素。有关示例,请参见


你的模板是什么样子的?实际上我可以用任何模板复制它,包括Todo和排行榜示例应用程序。在呈现函数中,尝试访问任何DOM元素都不会返回任何内容,就好像它不在页面中一样。是的,就是这样做的。将其拆分为另一个模板并使其正常工作。谢谢